【发布时间】:2020-11-03 20:49:05
【问题描述】:
f1.cpp 文件包含两个简单类的代码。 A 类内部定义函数print(),B 类外部定义函数。
class A{
public:
void print(){}
};
class B{
public:
void print();
};
void B::print(){
}
f1.cpp 将生成f1.lib。
f2.cpp 包含两个类的标头和main() 函数(它将与f1.lib 链接以创建f2.exe):
class A{
public:
void print();
};
class B{
public:
void print();
};
int main(){
A a;
a.print();
B b;
b.print();
}
当我编译时(在 Visual Studio 2019 中),我只收到类 A 的链接错误:
error LNK2001: unresolved external symbol "public: void __thiscall A::print(void)" (?print@A@@QAEXXZ)
fatal error LNK1120: 1 unresolved externals
似乎A::print 函数没有作为符号出现在库中。
最初我认为这是因为默认情况下内部函数定义变为“内联”。但是我已经尝试在它前面添加__declspec(noinline) 属性,它仍然无法正常工作。
你知道为什么符号不存在吗?
【问题讨论】: