我有一个函数,当在我的程序的主文件中定义时,按照我的意愿工作,并在头文件中定义时产生许多未定义的引用。
此头文件存在:
#include "Domain.h"
#include "Character.h"
class Item {
public:
Character input;
Item(Character c2);
};
Item pistol(int which, float strength);
产生问题的函数是pistol
。它看起来像
Item pistol(int which, float strength) {
Interval i = Interval(0, 1);
Domain d = Domain(i);
Character c = Character({d}, {1});
return Item(c);
}
当我尝试将代码与我的主程序链接时,所有引用Domain.h
和Character.h
中的对象的调用都是undefined references
,这意味着我会得到链接时间错误,如:< / p>
undefined reference to `Character::show()'
...
undefined reference to `Interval::Interval(float, float)'
...
这些错误发生在代码中的位置,这些错误不在pistol
函数内。
当我将此功能移动到我的主程序时,一切都按预期工作:
#include "Domain.h"
#include "Character.h"
#include "Item.h"
Item pistol(int which, float strength) {
// definition, see above
}
int main() {
Item w2 = pistol(2, 0.5);
return 0;
}
Item.h
/ Item.cxx
中的该功能有什么问题?
我需要做些什么呢?
答案 0 :(得分:1)
undefined reference
是链接阶段错误。
您很可能错过了与编译单元的链接,错过了重新编译依赖编译单元,或者尝试使用编译器从所有编译单元看不到的模板类/函数定义它!