我有3个文件要用G++编译,主文件如下:
//main.cpp
#include "test.hpp"
int main(int argc,char** args) {
//
}第二个文件是头文件:
//test.hpp
namespace shared {
class test {
//constructor
test();
};
}最后一个文件是test.hpp的代码文件
//test.cpp
shared::test::test() {
//
}我用G++这样编译:
g++ -c main.cpp test.cpp但是,G++报告'test.cpp‘文件中未定义的标识符'shared’。在命令行中,我已经传入了文件'main.cpp',其中包含头文件。如何解决这个问题?我只希望所有的‘#include’都在main.cpp中,而不想放在其他地方。
发布于 2012-09-07 15:23:45
在test.cpp的请求下添加#include "test.hpp"。
编译器并不关心命令行中文件的顺序。它只影响链接器。还请注意,编译多文件项目的常用方法是将每个项目编译为不同的子对象,如下所示:
g++ main.cpp -o main.o
g++ test.cpp -o test.o
ld main.o test.o -o program[.exe]这允许您仅重新编译确实发生更改的文件。如果您仔细考虑一下,您会发现.cpp文件可以包含许多头文件而不会出现问题;但是,当您的头文件开始包含许多头文件时,编译时间将会增加。转发声明可以帮助解决这些问题,但对于您的简单示例,简单的解决方案将会起作用。
https://stackoverflow.com/questions/12313490
复制相似问题