编译iPhone项目时遇到以下错误.谁知道我怎么解决它?"ved for oned :: MultiFormatUPCEANReader",引用自:MultiFormatUPCEANReader.o中的__ZTVN4oned23MultiFormatUPCEANReaderE $ non_lazy_ptr ld:未找到符号collect2:ld返回1退出状态
And*_*res 40
问题似乎是在类MultiFormatUPCEANReader中我已经声明了构造函数和析构函数,但是没有为析构函数编写一个实体,这导致了这个恼人的问题.希望这有助于有人解决他们的编译错误.这是一个可怕的编译错误,信息很少!
Dav*_*ner 13
通常,这是缺少的vtable问题:C++ FAQ Lite 23.10.
来自互联网档案:
如果您收到"错误:检测到未解析或未定义的符号:Fred类的虚拟表"形式的链接错误,您可能在类Fred中有一个未定义的虚拟成员函数.
编译器通常为具有虚函数的类创建一个称为"虚拟表"的神奇数据结构(这就是它处理动态绑定的方式).通常你根本不需要了解它.但是,如果您忘记为类Fred定义虚函数,则有时会出现此链接器错误.
这里有一些细节:许多编译器将这个神奇的"虚拟表"放在编译单元中,该单元定义了类中的第一个非内联虚函数.因此,如果Fred中的第一个非内联虚函数是wilma(),编译器会将Fred的虚拟表放在它看到Fred :: wilma()的同一个编译单元中.不幸的是,如果您不小心忘记定义Fred :: wilma(),而不是未定义Fred :: wilma(),您可能会得到"Fred的虚拟表未定义".伤心但真实.
在我的例子中,它是基类中定义的纯虚方法,它被声明但未在派生类中实现(更具体地说是vtable中的第一个虚方法),例如:
class Base
{
public:
virtual int foo() = 0;
virtual int bar() = 0;
};
class Derived : public Base
{
public:
Derived() {}
~Derived() {}
virtual int foo(); // <-- causes this obscure linker error
virtual int bar() {return 0;}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26934 次 |
| 最近记录: |