如何 link 单个项目 Code::Blocks 中的多个 .cpp 文件?

How to link multiple .cpp files in Code::Blocks for a single project?

在阅读 C++ For Dummies 这本书时,我的 CodeBlocks 项目中有三个文件,main.cpp、Pen.h 和 Pen.cpp。它们看起来像这样:

main.cpp:

#include <iostream>
#include "Pen.h"
//#include "Pen.cpp"

using namespace std;

int main()
{
    Pen MyPen = Pen();
    MyPen.test();
}

Pen.h:

#ifndef PEN_H_INCLUDED
#define PEN_H_INCLUDED

//#include "Pen.cpp" // Uncommenting this gives a different error

using namespace std;

class Pen
{
public:
    // attributes omitted

    // PROTOTYPES:
    // other functions omitted
    void test();
};

#endif // PEN_H_INCLUDED

Pen.cpp:

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

using namespace std;

//other function definitions omitted

void Pen::test()
{
    cout << "Test successful." << endl;
}

当我 运行 上面列出的代码时,我得到一个“对 `Pen::test()' 的未定义引用”错误。为了解决这个问题,我将 main.cpp 顶部的 #include 语句更改为:

#include <iostream>
//#include "Pen.h"
#include "Pen.cpp"

这按预期工作并正确打印出“测试成功”。

我的问题是:如果我以后无论如何都必须导入 .cpp 文件,那么将函数原型放在头文件中到底有什么意义?

编辑:原来这是一个不知道如何使用 Code::Blocks 而不是 C++ 语言的问题。

假设您使用的是 gcc,您可以通过命令行提供多个 .cpp 文件来一步编译和 link。

g++ Pen.cpp main.cpp

clang 应该是类似的。

clang++ Pen.cpp main.cpp

#include 应该永远不会 引用 .cpp 文件。完全没有。没有充分的理由这样做。包括您的 headers,然后在编译时提供 all .cpp 文件的名称。如果您的项目变大并且您有太多 .cpp 文件无法合理列出,那么是时候分解一个 makefile 或类似文件了。

main.cpp中包含头文件:
#include "Pen.h"

Pen.h文件没问题。

您需要将 Pen.cpp 文件添加到项目树中。
转到项目 -> 添加文件...并添加 Pen.cpp