【发布时间】:2009-07-23 13:19:55
【问题描述】:
我正在尝试编译大型 C++ 项目,但遇到了这个奇怪的错误。我知道它是链接错误,但无法弄清楚它到底是什么。
test_oqlquery.o:(.rodata._ZTV8r_MarrayIhE[vtable for r_Marray]+0x8): undefined reference to r_Marray<unsigned char>::~r_Marray()'
test_oqlquery.o:(.rodata._ZTV8r_MarrayIhE[vtable for r_Marray<unsigned char>]+0xc): undefined reference tor_Marray::~r_Marray()'
test_oqlquery.o:(.rodata._ZTV8r_MarrayIhE[vtable for r_Marray]+0x28): undefined reference to `r_Marray::print_status(std::basic_ostream >&) const'
这个错误是什么意思?而且,是否可以看到发生错误的行号?如何 ?我主要关心这意味着什么
".rodata._ZTV8r_MarrayIhE[r_Marray 的vtable]+0x28"
其实我的错误是这样的,但不知道为什么尖括号里面的东西都不见了,所以用“”代替,这里是详细的错误,它也与模板实例化有关
test_oqlquery.o:(.rodata._ZTV8r_MarrayIhE[vtable for r_Marray"unsigned char"]+0x8): undefined reference to `r_Marray"unsigned char"::~r_Marray()'
我正在使用 g++ 4.3.3。
请原谅,我不能在这里提交整个源代码,因为它非常大并且跨越多个目录。
非常感谢。
【问题讨论】:
-
你能告诉我一些关于模板实例化的想法吗?
-
你能把代码贴在你定义了 ~r_Marray 和 print_status 的地方吗?它们在 r_Marray 头文件中对吗?
-
我检查了头文件,是的,它定义了这些方法,但是是虚拟的。该类派生自另一个类,并在基类中定义了 print_status 方法。在查看来源时,我遇到了 file.icc,它应该包含什么?而且,如果我在另一个目录 A 中有类并且我在目录 B 源文件中使用该类,前向声明如何工作?
-
因为这个头文件中包含了很多其他的头文件,而且基类中定义了很多方法,所以我必须检查每个头文件才能知道哪里出了问题。这就是为什么,我无法发布源代码。
-
前向声明不关心类的实际声明位置。话虽如此,由于您使用的是模板,因此如果您确实需要在头文件中使用该类,则可能很难转发声明。
标签: c++ g++ compiler-errors