【发布时间】:2015-08-07 21:02:28
【问题描述】:
我是 C++ 的新手程序员,我目前遇到编译错误
Undefined symbols for architecture x86_64
据说这源于头文件和实现文件的包含/编码方式。
下面是一些生成我收到的编译错误的代码
主要
//Main.cpp
#include <iostream>
#include <string>
#include "Animal.hpp"
using namespace std;
int main(){
Animal myPet;
myPet.shout();
return 0;
}
标题
//Animal.hpp
#ifndef H_Animal
#define H_Animal
using namespace std;
#include <string>
class Animal{
public:
Animal();
void shout();
private:
string roar;
};
#endif
实施
//Animal.cpp
#include "Animal.hpp"
#include <string>
Animal::Animal(){
roar = "...";
}
void Animal::shout(){
roar = "ROAR";
cout << roar;
}
此代码生成我的编译问题。如何解决这个问题?
感谢您的宝贵时间
编辑
Undefined symbols for architecture x86_64:
"Animal::shout()", referenced from:
_main in test-5f7f84.o
"Animal::Animal()", referenced from:
_main in test-5f7f84.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
【问题讨论】:
-
您能否更具体地说明您的编译器给您的错误信息是什么?
-
仅仅包含头文件是不够的,您需要将每个 .cpp 编译成一个目标文件,然后将这些目标文件的所有链接在一起。鉴于您发布的内容,您似乎只是在编译和链接 main.cpp。
-
显示你传递给 clang 的参数
-
@Nicholas Hayden 好的,如果你有三个文件,test.cpp(有 main)、animal.cpp 和 animal.hpp。命令应该是
g++ animal.cpp test.cpp。您需要编译所有源文件。
标签: c++ header-files