c++ - 无法在 C++ 中从 main 实例化另一个类

标签 c++ class

这些是我的文件。我正在尝试使用 main.cpp 中的另一个类打印一行,但它给出了一个错误“undefined reference to poddy:poddy()

主要.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++ 代码是正确的。 “ undefined reference ”是一个链接器错误,与您编译代码的方式有关。为了使其链接,请使用此命令行:

g++ poddy.cpp main.cpp

细节如下:编译C++代码的过程分为三个主要阶段——预处理、编译和链接。预处理器处理代码中的 #define#include 语句。编译器获取预处理结果,并为每个翻译单元生成二进制代码(在您的例子中,有两个翻译单元 - poddy.cppmain.cpp)。最后,链接器在翻译单元内的二进制代码部分之间建立连接。

即使一次只提供一个翻译单元,预处理器和编译器也可以完成它们的工作。然而,链接器必须同时“看到”所有的翻译单元。当您在没有附加标志的情况下调用 g++ 时,将调用编译器的所有阶段,包括链接器。这就是您需要一次列出所有翻译单元的原因。

关于c++ - 无法在 C++ 中从 main 实例化另一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16882082/

相关文章:

类类型接口(interface)不强制执行函数参数类型

php - 常量表达式包含无效操作

c++ - 是否可以从结构中定义一个子项并将其设置为成员?

c++ - 不能在从 vector 派生的类中交换结构

c++ - 将指向 T 的指针存储在 void* 中,但 T 可以是常量或非常量 - 使用 void const* 还是仅使用 void*?

c# - 从 C# 调用 Java 代码

c++ - 如何使用 std::enable_if_t 进行完美转发?

c++ - 如何为递归函数编写方法定义?

c# - 由于其保护级别而无法访问

c++在不知道扩展类的情况下调用存储在基类变量中的扩展类的构造函数