首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G++显示有关未定义命名空间的错误

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

Stack Overflow用户
提问于 2012-09-07 15:16:10
回答 2查看 150关注 0票数 3

我有3个文件要用G++编译,主文件如下:

代码语言:javascript
复制
//main.cpp

#include "test.hpp"

int main(int argc,char** args) {
  //
}

第二个文件是头文件:

代码语言:javascript
复制
//test.hpp

namespace shared {
  class test {

    //constructor 
    test();
  };
}

最后一个文件是test.hpp的代码文件

代码语言:javascript
复制
//test.cpp

shared::test::test() {
  //
}

我用G++这样编译:

代码语言:javascript
复制
g++ -c main.cpp test.cpp

但是,G++报告'test.cpp‘文件中未定义的标识符'shared’。在命令行中,我已经传入了文件'main.cpp',其中包含头文件。如何解决这个问题?我只希望所有的‘#include’都在main.cpp中,而不想放在其他地方。

EN

Stack Overflow用户

回答已采纳

发布于 2012-09-07 15:23:45

test.cpp的请求下添加#include "test.hpp"

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

代码语言:javascript
复制
g++ main.cpp -o main.o
g++ test.cpp -o test.o
ld main.o test.o -o program[.exe]

这允许您仅重新编译确实发生更改的文件。如果您仔细考虑一下,您会发现.cpp文件可以包含许多头文件而不会出现问题;但是,当您的头文件开始包含许多头文件时,编译时间将会增加。转发声明可以帮助解决这些问题,但对于您的简单示例,简单的解决方案将会起作用。

票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12313490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档