0

我的项目有这个文件夹结构:

Project/
--Classes/
----Class1.h
----Class1.cpp
--main.cpp

“Class1.h”包含方法定义,“Class1.cpp”是“Class1.h”的源代码。

“Class1.h”的源代码是这样的:

class Class1 {
  public:
    void do_something();
};

“Class1.cpp”的源代码是这样的:

#include "Class1.h"

void Class1::do_something() {
  //
} 

“main.cpp”的源代码是这样的:

#include "Classes/Class1.h"

int main(int argc,char** args) {
  Class1* var = new Class1();
  var->do_something();
  return 0;
}     

但是,在编译“main.cpp”时,编译器不知道Class1中方法的实现在哪里,所以会显示关于未定义引用的链接错误。

我是否必须在命令行中添加任何路径,以便编译器知道它必须编译哪些源文件?如何告诉编译器它也必须编译“Class1.cpp”?

4

3 回答 3

5

您需要将项目中的所有文件提供给编译器,而不仅仅是“main.cpp”。在这里,您可以阅读有关与 Gcc 一起编译乘法文件的基础知识。

另一种选择是将您的类编译为动态或静态库,但如果您对库不太熟悉,则应该先将它们一起编译。

于 2012-08-15T11:04:40.153 回答
2

正确的方法是在文件中包含标头Class1.cpp。这样,如果 Class1.cpp 被编译为库,您可以使用头文件来获取声明。

反之,如果您将直接使用 Class1.cpp,则将其与您的项目一起编译。您应该包含Class1.cpp在您的 main.cpp 中。

于 2012-08-15T11:03:39.393 回答
2

您需要了解如何构建(编译和链接)C++ 应用程序。这个主题通常不会在有关 C++ 的编程书籍中描述,并且是唯一的方法 - 谷歌和带有文章的编程社区站点。

快速的答案是:

g++ -c Classes/Class1.cpp -o Class1.o
g++ -c main.cpp -o main.o
g++ Class1.0 main.0 -o ProjectName

这是一组用于编译和链接程序的简单命令。通常它会通过构建系统(make、qmake、cmake、waf、scons、ant 等)来完成。此外,IDE 无需额外配置即可构建程序,例如 Visual Studio。

于 2012-08-15T11:11:42.133 回答