关于使用#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构造函数的定义位置,但我不明白为什么不...
您的class.h不应在class.cc中重复。相反,class.cc应该#include "class.h"
在顶部。然后,您只需要认识到您将丢失构造函数定义,因此可以像以前在class.cc中那样在class.h中使其内联,或者在class.cc中以常规方式对其进行定义。
切勿使用C或C ++将一个文件复制粘贴到另一个文件中。这正是#include的目的!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句