【问题标题】:C++: Undefined symbols for architecture x86_64C++:架构 x86_64 的未定义符号
【发布时间】:2013-12-01 14:37:22
【问题描述】:

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

我有三个文件(我知道整个程序没有任何意义,只是为了测试目的):

main.cpp

#include "Animal.h"

Animal ape;

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

    return 0;
}

动物.h

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

动物.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]

这里有什么问题?

【问题讨论】:

    标签: c++


    【解决方案1】:

    需要将Animal.cpp和main.cpp编译链接在一起,例如:

    gcc main.cpp Animal.cpp
    

    您似乎没有链接到Animal.o(上面的命令会这样做)。

    附:您还需要声明您在Animal.cpp 中定义的默认构造函数:

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

    【讨论】:

    • 该操作可能也需要一些包含保护来创建安全代码...en.wikipedia.org/wiki/Include_guard
    • 谢谢,这似乎是解决方案,但是当我运行这个命令时,我得到一个新的错误:Animal.cpp:3:6: error: definition of implicitly declared default constructor Animal::Animal(){ ^ 1 error generated.
    • 呵呵,当然,我怎么会看不到这个:)谢谢@NPE。
    猜你喜欢
    • 2016-06-20
    • 2015-06-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 2012-07-20
    • 2014-05-14
    • 2015-06-17
    • 2016-03-25
    相关资源
    最近更新 更多