2014-08-30 110 views
-3

我有一个关于使用#include ed文件中定义的类的简单问题。我有三个文件,class.cc,class.h和user.cc.我试图在文件user.cc中使用class.cc中定义的类,但出现了一个我想要理解的错误(不仅仅是解决方法)。如何用g ++构造另一个文件中定义的类?

以下是文件:

class.cc

class myclass { 
    public: 
    myclass() : nb(1) {}; 
    int nb; 
    int myfunc(); 
}; 

int myclass::myfunc() { 
    return 42; 
} 

class.h

class myclass { 
    public: 
    myclass(); 
    int nb; 
    int myfunc(); 
}; 

user.cc

#include <iostream> 
#include "class.h" 

int main() { 
    myclass example; 
    std::cout << example.myfunc() << "class works too."; 
} 

我要做的就是创建一个对象main.cc(main.o)和class.cc(clas s.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的构造函数定义在哪里,但我不明白为什么不...

回答

1

你的class.h不应该在class.cc中重复。相反,class.cc应该在顶部做#include "class.h"。然后你只需要认识到你会错过你的构造函数定义,所以要么像在class.cc中那样在class.h中内联,要么在class.cc中以常规方式排队。

您不应该将一个文件复制粘贴到C或C++中。这正是#include的目的!

+0

非常感谢您的回答!我在这里是新来的,所以我可以问你为什么你认为这个问题已经被降低了? – 2014-08-30 07:32:01

+0

您的问题可能因为缺乏兴趣而缺乏基础的C++编程。如果你是新手的c + +多少有点期待。准备好被降低很多。 – youdontneedtothankme 2014-08-30 11:48:19

相关问题