如何使用g ++构建另一个文件中定义的类?

时间:2014-08-30 07:16:17

标签: c++ class linker g++

我有一个关于使用#include ed文件中定义的类的简单问题。我有三个文件,class.cc,class.h和user.cc.我正在尝试在user.cc文件中使用class.cc中定义的类,但是我想了解一个错误(不仅仅是解决)。

以下是文件:

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(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构造函数的定义,但我不明白为什么不...

1 个答案:

答案 0 :(得分:1)

你的class.h不应该在class.cc中重复。相反,class.cc应该在顶部#include "class.h"。然后你只需要认识到你将缺少你的构造函数定义,所以要么像在class.cc中那样在class.h中使其内联,要么在类中以常规方式定义它。立方厘米。

您永远不应该在C或C ++中将一个文件复制粘贴到另一个文件中。这正是#include的用途!