我有一个关于使用#include
ed文件中定义的类的简单问题。我有三个文件,class.cc,class.h和user.cc.我正在尝试在user.cc文件中使用class.cc中定义的类,但是我想了解一个错误(不仅仅是解决)。
以下是文件:
class myclass {
public:
myclass() : nb(1) {};
int nb;
int myfunc();
};
int myclass::myfunc() {
return 42;
}
class myclass {
public:
myclass();
int nb;
int myfunc();
};
#include <iostream>
#include "class.h"
int main() {
myclass example;
std::cout << example.myfunc() << "class works too.";
}
我所做的是为main.cc(main.o)和class.cc(class.o)以及静态库class.a创建一个目标文件。然后,当我尝试将所有内容链接到:
g++ -o user user.o class.a
我收到以下错误:
user.o:user.cc:(.text+0x15): undefined reference to `myclass::myclass()'
user.o:user.cc:(.text+0x15): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `myclass::myclass()'
collect2: error: ld returned 1 exit status
据我所知,用户无法看到myclass构造函数的定义,但我不明白为什么不...
答案 0 :(得分:1)
你的class.h不应该在class.cc中重复。相反,class.cc应该在顶部#include "class.h"
。然后你只需要认识到你将缺少你的构造函数定义,所以要么像在class.cc中那样在class.h中使其内联,要么在类中以常规方式定义它。立方厘米。
您永远不应该在C或C ++中将一个文件复制粘贴到另一个文件中。这正是#include的用途!