我的项目有这个文件夹结构:
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”?
答案 0 :(得分:5)
您需要将项目中的所有文件都提供给编译器,而不仅仅是“main.cpp”。 Here您可以阅读有关使用Gcc编译多个文件的基础知识。
另一种选择是将您的类编译为动态或静态库,但如果您不熟悉库,则应该从简单编译它们开始。
答案 1 :(得分:2)
执行此操作的正确方法是在Class1.cpp
文件中包含标头。这样,如果将Class1.cpp编译为库,则可以使用头文件来获取声明。
反过来说,如果你直接使用Class1.cpp,用你的项目编译 。您应该在main.cpp中包含Class1.cpp
。
答案 2 :(得分: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。