我正在尝试将.cpp实现文件与头文件链接-我从Mac终端收到此错误消息-
rowlandev:playground rowlandev$ g++ main.cpp -o main
Undefined symbols for architecture x86_64:
"Person::Person()", referenced from:
_main in main-32e73b.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文件中的代码:
#include <iostream>
#include "playground.h"
using namespace std;
Person::Person() {
cout << "this is running from the implementation file" << endl;
}
这是我主要功能的代码:
#include <iostream>
#include "playground.h"
using namespace std;
int main() {
Person chase;
}
这是我的头文件中的代码:
#include <string>
using namespace std;
#ifndef playground_h
#define playground_h
class Person {
public:
Person();
private:
string name;
int age;
};
#endif /* playground_h */
该如何解决此错误?随意添加我可以做的其他事情来改进我刚刚编写的代码。向任何事物开放。
答案 0 :(得分:1)
当您尝试从源代码How does the compilation/linking process work?
创建可执行文件时,这是一本很好的书,以了解发生了什么。这里发生的是链接器不知道Person::Person()
中正在调用的main()
的位置。请注意,当您调用g ++时,从未为它提供过为Person::Person()
编写代码的文件。
调用g ++的正确方法是:
$ g++ -o main main.cpp person.cpp
答案 1 :(得分:0)
链接错误表明链接无法找到构造函数。构造函数不在main.cpp中,而是在另一个文件中,在您的示例中未命名。尝试将所有内容放在单个cpp文件中以使其正常工作。