C++ 无法从C+;中的main实例化另一个类+;

C++ 无法从C+;中的main实例化另一个类+;,c++,class,C++,Class,这些是我的档案。我试图使用main.cpp中的另一个类打印一行,但它给出了一个错误“未定义对poddy的引用:poddy()” main.cpp #include <iostream> #include "poddy.h" using namespace std; int main() { poddy le; return 0; } poddy.cpp #include "poddy.h" #include <iostream> using nam

这些是我的档案。我试图使用main.cpp中的另一个类打印一行,但它给出了一个错误“未定义对poddy的引用:poddy()

main.cpp

#include <iostream>
#include "poddy.h"

using namespace std;

int main() {
    poddy le;
    return 0;
}
poddy.cpp

#include "poddy.h"
#include <iostream>

using namespace std;

poddy::poddy() {
    cout << "I am llalala and use anoder class" << endl;
}
#包括“poddy.h”
#包括
使用名称空间std;
poddy::poddy(){

Cuth

你的C++代码是正确的。“未定义引用”是链接错误,它与编译代码的方式有关。要使其链接,请使用此命令行:

g++ poddy.cpp main.cpp
详细说明:编译C++代码的过程有三个主要阶段:预处理、编译和链接。预处理器处理代码< >代码> <代码> >代码中包含语句。编译器获取预处理结果,并为每个翻译单元生成二进制代码。(在您的例子中,有两个翻译单元-
poddy.cpp
main.cpp
)。最后,链接器在翻译单元中的二进制代码部分之间建立连接


预处理器和编译器即使一次提供一个翻译单元,也可以完成它们的工作。然而,链接器必须“看到”所有的翻译单元一次调用。当你调用代码> G++< /COD>没有附加的标志时,编译器的所有阶段都会被调用,包括链接器。这就是为什么你需要同时列出所有的翻译单元。

< P>你的C++代码是正确的。“未定义的引用”是与编译代码的方式有关的链接器错误。要使其链接,请使用以下命令行:

g++ poddy.cpp main.cpp
详细说明:编译C++代码的过程有三个主要阶段:预处理、编译和链接。预处理器处理代码< >代码> <代码> >代码中包含语句。编译器获取预处理结果,并为每个翻译单元生成二进制代码。(在您的例子中,有两个翻译单元-
poddy.cpp
main.cpp
)。最后,链接器在翻译单元中的二进制代码部分之间建立连接


预处理器和编译器即使一次提供一个翻译单元,也可以完成它们的工作。然而,链接器必须“看到”一次列出所有翻译单元。当您调用
g++
而不使用其他标志时,将调用编译器的所有阶段,包括链接器。这就是为什么您需要一次列出所有翻译单元。

您使用什么来编译和链接?您是如何编译的?顺便说一句,“使用命名空间std”几乎从来都不是一件好事。@Joachim:那该怎么办呢?用std::;
写很多次?我没有在代码块中的项目中工作,当我在项目中工作时,它开始工作了。谢谢大家。永远不要用“it”这个词在一个不清楚这个词指的是什么的问题中,最重要的一条信息——是什么给了你错误——被你使用的“it gives a error”隐藏了起来。也完全没有帮助,没有指定在发生错误之前您在过程中走了多远。您使用什么来编译和链接?您是如何编译的?顺便说一句,“使用命名空间标准”几乎从来都不是一件好事。@Joachim:那该怎么办呢?用std::;写很多次?我没有在代码块中的项目中工作,当我在项目中工作时,它开始工作了。谢谢大家。永远不要用“it”这个词在一个不清楚这个词指的是什么的问题中,最重要的一条信息——是什么给了你错误——被你使用的“it gives a error”隐藏了起来。也完全没有帮助,在出现错误之前没有指定您在该过程中走了多远。特别是,您需要将所有源文件指定给编译器。如果您在命令行上构建代码时没有引用poddy.cpp,编译器将不会构建它,链接器也不知道在何处找到它定义的类。具体来说,您需要将所有源文件指定给编译器。如果您在命令行上构建代码时未引用poddy.cpp,编译器将不会构建它,链接器也不知道在哪里可以找到它定义的类。