在C ++中无法识别的单独.cpp文件中来自同一命名空间的自由函数

时间:2014-12-08 08:41:25

标签: c++ function namespaces

我有一个自动生成的file1.cpp文件,格式如下:

namespace FirstNS {
namespace SecondNS {
   int newFunction(){
   }
}
}

我正在尝试在另一个mainFile.cpp文件中使用main中的newFunction。我用它来引用它     FirstNS::SecondNS::newFunction();

但是,我收到以下错误:

  

'newFunction'不是'FirstNS :: SecondNS'的成员

我尝试过的事情

  • 编写一个单独的file1.h并将其包含在mainFile.cpp中。遗憾的是这是一个问题,因为我无法编辑自动生成的文件,因此无法在file1.cpp中包含头文件
  • 在mainFile.cpp中包含file1.cpp。这导致错误消息“'int newFunction()'被多重定义”,因为它随后被导入多个文件

如何让它对mainFile.cpp的主要部分可见/可用?我无法对生成的file1.cpp进行任何修改。

1 个答案:

答案 0 :(得分:1)

将此转发声明

namespace FirstNS {
namespace SecondNS {
   int newFunction();
}
}

在头文件中。请务必使用#include警卫,并在mainFile.cpp

中添加该标头

(你不能将 define 一个函数乘以,这就是你在尝试#include file1.cpp时遇到链接错误的原因。

您可能会发现您正在使用的生成器工具也可以为您生成这些前向声明。