G ++显示有关未定义命名空间的错误

时间:2012-09-07 07:16:10

标签: c++ gcc header include compiler-errors

我有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中,而不是在其他地方。

2 个答案:

答案 0 :(得分:3)

#include "test.hpp"的开头添加test.cpp

编译器不关心命令行中文件的顺序。它只影响链接器。 还请注意,编译多文件项目的常用方法是将每个项目编译为不同的子对象,如下所示:

g++ main.cpp -o main.o
g++ test.cpp -o test.o
ld main.o test.o -o program[.exe]

这允许您只重新编译真正改变的文件。如果您考虑一段时间,您会发现.cpp文件可以包含许多标题而没有问题;但是,当您的标题开始包含许多标题时,编译时间会增加。前向声明可以帮助解决这些问题,但是通过简单的示例,简单的解决方案就可以工作。

答案 1 :(得分:1)

您必须在#include "test.hpp"文件中说test.cpp。必须知道名称空间声明。