我们有一个代码库,其中有 .cpp 和 .h,它被设置为使用 gcc 构建
我的理解是 gcc 将为适当的文件选择适当的编译器,所以我相信(并且测试使我几乎 100% 确定)我们的 .h 文件被编译为 c 而我们的 .cpp 文件被编译为 C++。
我曾经尝试更改为 g++ 并得到一连串的错误,当我尝试使用 .hpp 时也是如此。
所以为了解决这个问题,大多数时候我只是在需要时使用 extern C++(例如,当包含地图时)
但是,我似乎无法正确使用名称空间。我假设编译器抱怨我的命名空间,因为它被编译为 .h?这个对吗。我当前的代码看起来像(在没有外部尝试之后):
在 foo.h
extern "C++" {
namespace Caching_Logic
{
class foo
{
....
}
}
}
在 bar.h
extern "C++" {
using namespace Caching_Logic; //completely defeats the point of namespaces
}
class bar
{
....
foo m_foo;
...
}
这两个文件都包含在 .cpp 文件中
编译时的错误是:
filethatusesbar.cpp:错误:“class bar”没有名为“m_foo”的成员</p>
bar.h:错误:'Caching_Logic' 不是命名空间名称
bar.h:错误:“;”之前的预期命名空间名称 令牌
我正在考虑完全放弃命名空间,但我真的很想为此确定我的代码范围!
- - -更新 - - -
阅读http://www.network-theory.co.uk/docs/gccintro/gccintro_54.html后
我对 gcc 的作用有了更好的理解。最初我在某处读到 gcc 在必要时在 C++ 中编译,在遇到 .c 时在 C 中编译
这是真的,但似乎链接器存在问题。由于这是作为库编译的,因此我以前从未见过问题是有道理的。我猜这与我的范围问题有关,外部链接?