C++:架构x86_64的未定义符号

4

我已经阅读了其他带有相同标题的大多数帖子,但并没有找到解决方案。

我有三个文件(我知道整个程序毫无意义,只是用于测试目的):

main.cpp

#include "Animal.h"

Animal ape;

int main(int argc, char *argv[]){
    ape.getRace();

    return 0;
}

Animal.h

class Animal{
    public:
        int getRace();
    private:
        int race;
};

Animal.cpp

#include "Animal.h"

Animal::Animal(){
    race = 0;
}

int Animal::getRace(){
    race = 2;
    return race;
}

我运行 main.cpp 文件时遇到了以下错误:
Undefined symbols for architecture x86_64:
  "Animal::getRace()", referenced from:
      _main in main-oTHqe4.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[Finished in 0.1s with exit code 1]

这里出了什么问题?
1个回答

8

您需要将Animal.cppmain.cpp编译并链接在一起,例如:

gcc main.cpp Animal.cpp

看起来你没有链接到 Animal.o (以上命令会自动链接)。

另外,你还需要声明在 Animal.cpp 中定义的默认构造函数:

class Animal{
    public:
        Animal(); // <=== ADD THIS
        int getRace();
    private:
        int race;
};

这个操作可能也需要一些包含保护来创建安全的代码...http://en.wikipedia.org/wiki/Include_guard - user2485710
谢谢,这似乎是解决方案,但是当我运行此命令时,我会得到一个新的错误:Animal.cpp:3:6: error: definition of implicitly declared default constructor Animal::Animal(){ ^ 1 error generated. - allegutta
呵呵,当然,我怎么可能没看到这个 :) 感谢 @NPE。 - allegutta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接