【发布时间】:2011-05-12 08:44:56
【问题描述】:
我在执行以下操作时遇到链接器(未解析的外部符号)错误:
-我有一个类“Object”——它在“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) {}
突然出现链接器错误! “错误 LNK2019:无法解析的外部符号”
为什么? - 这是否意味着我不能对构造函数使用内联?
编辑:实际上我注意到所有方法都是如此。 但是如果我将所有方法移到 object.h 标头文件中,它确实可以工作。您不能从定义对象的头文件外部内联函数吗?
EDIT2:好吧,一个大更新,我决定构建一个快速测试用例:
main.cpp:
#include "a.h"
int main ()
{
a t;
t.test(5);
return 0;
}
啊.h
class a {
public:
void test (int x);
};
a.cpp
#include <iostream>
#include "a.h"
inline void a::test(int x) {
std::cout << x << std::endl;
}
这会产生以下错误:
main.obj : 错误 LNK2019: 函数 _main 中引用的未解析外部符号“public: void __thiscall a::test(int)” (?test@a@@QAEXH@Z)
删除“inline”关键字使程序工作。将“a.h”和“a.cpp”合并到一个文件中也是如此。
我实在想不出更多信息可以提供:/
【问题讨论】:
-
看看这个关于内联类成员函数的讨论——它可能会帮助你理解为什么一个或另一个案例会失败。 msdn.microsoft.com/en-us/library/bw1hbe6y.aspx
-
我不认为
inline意味着你认为的意思。你能说说你为什么要努力实现它吗?
标签: c++ linker-errors unresolved-external