不能在c++中从main实例化另一个类

Can not instantiate another class from main in C++

本文关键字:实例化 另一个 main 中从 c++ 不能      更新时间:2023-10-16

这些是我的文件。我试图使用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;
}

请帮帮我!

你的c++代码是正确的。"未定义引用"是与编译代码的方式有关的链接器错误。为了使其链接,使用以下命令行:

g++ poddy.cpp main.cpp

下面是详细说明:编译c++代码的过程有三个主要阶段——预处理、编译和链接。预处理器处理代码中的#define#include语句。编译器接受预处理的结果,并为每个翻译单元生成二进制代码(在您的示例中,有两个翻译单元—poddy.cppmain.cpp)。最后,链接器在翻译单元内的二进制代码之间建立连接。

即使每次只提供一个翻译单元,预处理器和编译器也能完成它们的工作。然而,连接器必须同时"看到"所有的翻译单元。当您调用没有附加标志的g++时,将调用编译器的所有阶段,包括链接器。这就是为什么你需要一次列出所有的翻译单位。