这些是我的档案。我正在尝试使用main.cpp中的另一个类来打印一行,但它会出现错误“对poddy的未定义引用:poddy()”
的main.cpp
#include <iostream>
#include "poddy.h"
using namespace std;
int main() {
poddy le;
return 0;
}
poddy.h
#ifndef PODDY_H
#define PODDY_H
class poddy {
public:
poddy();
};
#endif // PODDY_H
poddy.cpp
#include "poddy.h"
#include <iostream>
using namespace std;
poddy::poddy() {
cout << "I am llalala and use anoder class" << endl;
}
请帮帮我!
答案 0 :(得分:4)
您的C ++代码是正确的。 “未定义的引用”是一个链接器错误,与编译代码的方式有关。要使其链接,请使用以下命令行:
g++ poddy.cpp main.cpp
以下是详细信息:编译C ++代码的过程有三个主要阶段 - 预处理,编译和链接。预处理器处理代码中的#define
和#include
语句。编译器获取预处理的结果,并为每个翻译单元生成二进制代码(在您的情况下,有两个翻译单元 - poddy.cpp
和main.cpp
)。最后,链接器在翻译单元内建立二进制代码部分之间的连接。
即使一次只有一个翻译单元,预处理器和编译器也可以完成它们的工作。但是,链接器必须立即“看到”所有翻译单元。当您在没有附加标志的情况下调用g++
时,将调用编译器的所有阶段,包括链接器。这就是您需要一次列出所有翻译单元的原因。