C++ 命名空间编译问题
我刚开始在VisualStudio工作(我使用的是2005版)。我遇到了一个名称空间的问题,我无法解决 我正在尝试创建一个静态库,稍后将链接到一个应用程序 因此,我有一个XXX.h文件,其中包含以下代码C++ 命名空间编译问题,c++,visual-c++,namespaces,visual-studio-2005,static-libraries,C++,Visual C++,Namespaces,Visual Studio 2005,Static Libraries,我刚开始在VisualStudio工作(我使用的是2005版)。我遇到了一个名称空间的问题,我无法解决 我正在尝试创建一个静态库,稍后将链接到一个应用程序 因此,我有一个XXX.h文件,其中包含以下代码 #ifndef _XXX_X_H #define _XXX_X_H namespace LLL_NWK { void lllInit(); } #endif 我在XXX.c中包含XXX.h,代码如下 #include "XXX.h" using namespace LLL_NWK;
#ifndef _XXX_X_H
#define _XXX_X_H
namespace LLL_NWK
{
void lllInit();
}
#endif
我在XXX.c中包含XXX.h,代码如下
#include "XXX.h"
using namespace LLL_NWK;
void lllInit()
{
}
但是,在构建库时,我遇到以下错误
error C2061: syntax error : identifier 'LLL_NWK'
error C2059: syntax error : ';'
error C2449: found '{' at file scope (missing function header?)
error C2059: syntax error : '}'
我无法找出这个错误的原因。非常感谢您的帮助和指点。首先,
使用名称空间LLL\u NWK
在这里不合适。您正在名称空间LLL\u NWK
之外声明和定义一个函数void lllInit()
。您需要将定义放在名称空间中,可以这样做:
void LLL_NWK::lllInit()
{
}
namespace LLL_NWK
{
void lllInit()
{
}
}
或者像这样:
void LLL_NWK::lllInit()
{
}
namespace LLL_NWK
{
void lllInit()
{
}
}
其次,确保将代码编译为C++该代码不受C编译器支持-确保将文件名重命名为.cpp而不是.C。在这种情况下,不支持命名空间。请参阅本文:将
XXX.c
重命名为XXX.cc
或XXX.cpp
——编译器认为它是普通的c
代码,而不是c++
code@AdityaSehgal这并不能解决所有问题。你的代码错误,看看我的答案。胡安点是一个有效的点-所以你最好考虑他刚才说的。上面的代码在定义文件中很容易出错(我很确定我在std中见过使用名称空间来修补名称空间冲突)。但代码仍然有效。@AdamGalarneau对,如果试图使用LLL\u NWK::lllInit()
,则会导致链接器错误。@AdamGalarneau:谢谢您提供的信息。我们已经做了必要的改变。