2012-08-15 177 views
0

我的项目有该文件夹结构:困惑C++的#include

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

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

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

​​

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

#include "Class1.h" 

void Class1::do_something() { 
    // 
} 

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

#include "Classes/Class1.h" 

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

然而,编译时‘的main.cpp’,编译器不知道在柯乐的执行方法s1是,所以它显示关于未定义参考的链接错误。

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

+0

你使用哪种编译器? – 2012-08-15 11:01:37

+0

gcc我想,因为我使用dev C++ ide – jondinham 2012-08-15 11:02:09

+0

你可能想要使用另一个IDE。 AFAIK Dev-C++很久没有得到支持。抛开,你在“class1.cpp”中包含了“class1.h”吗? – ApplePie 2012-08-15 11:04:18

回答

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。

2

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

反过来,如果你会直接使用Class1.cpp,编译它你的项目。您应该在您的main.cpp中包含Class1.cpp

5

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

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