pau*_*l23 5 c++ linker-errors unresolved-external
好吧,我在执行以下操作时遇到链接器(未解析的外部符号)错误:
- 我有一个"对象"类 - 它在"object.h"中定义.
它有一个构造函数,如: explicit Object(double x, /* lots more */);
在文件"object.cpp"中我想给该构造函数一个体: Object::object(double x) : _x(x) {}
这工作..但是如果我在"object.cpp"文件中添加关键字"inline":
inline Object::Object(double x) : _x(x) {}
Run Code Online (Sandbox Code Playgroud)
突然出现链接器错误!"错误LNK2019:未解析的外部符号"
为什么? - 这是否意味着我不能使用内联构造函数?
编辑:实际上我注意到所有方法的情况.但是,如果我将所有方法移动到object.h头文件,它就可以工作了.您不能从定义对象的头文件外部内联函数?
EDIT2:好的更新,我决定构建一个快速测试用例:
main.cpp:
#include "a.h"
int main ()
{
a t;
t.test(5);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
啊
class a {
public:
void test (int x);
};
Run Code Online (Sandbox Code Playgroud)
a.cpp
#include <iostream>
#include "a.h"
inline void a::test(int x) {
std::cout << x << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
这会出现以下错误:
main.obj:错误LNK2019:函数_main中引用的未解析的外部符号"public:void __thiscall a :: test(int)"(?test @ a @@ QAEXH @ Z)
删除"inline"关键字使程序工作..将"ah"和"a.cpp"组合成1个文件.
我真的想不出更多的信息:/
您需要了解有关标记的函数定义的规则inline。
标记函数inline意味着您可以在程序中的多个翻译单元中定义该函数(但每个翻译单元只能定义一次),但所有定义必须相同,并且您必须在使用该函数的每个翻译单元中提供定义。
main.cpp在您的示例中,使用了翻译单元a::test(int),但该翻译单元中没有定义。翻译单元 from 中有一个定义,a.cpp但在这里它被标记inline,这意味着您不能在翻译单元 from 之外留下定义main.cpp。
我不确定为什么要添加inline到定义中,a.cpp因为它没有必要或没有用。inline允许您将函数定义放置在共享头文件中,但如果您想将函数放置在源文件中,则它没有用处。
| 归档时间: |
|
| 查看次数: |
2674 次 |
| 最近记录: |