【问题标题】:Namespace compilation issues命名空间编译问题
【发布时间】:2013-08-14 16:23:00
【问题描述】:

我是 Visual Studio 的新手(我使用的是 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;

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 : '}'

我无法找出此错误的原因。希望能得到一些帮助和指点。

【问题讨论】:

  • XXX.c 重命名为 XXX.ccXXX.cpp - 编译器认为这是普通的 C 代码而不是 C++ 代码

标签: c++ visual-c++ namespaces visual-studio-2005 static-libraries


【解决方案1】:

首先,using namespace LLL_NWK 在这里不合适。您正在声明和定义namespace LLL_NWK 的函数void lllInit() outside。您需要将定义放在命名空间内,可以这样完成:

void LLL_NWK::lllInit()
{
}

或者像这样:

namespace LLL_NWK
{
   void lllInit()
   {
   }
}

其次,确保将代码编译为 C++

【讨论】:

    【解决方案2】:

    C 编译器不支持该代码 - 确保将文件名重命名为 .cpp 而不是 .c。在这种情况下,不支持命名空间。看到这个帖子:Namespaces in C

    【讨论】:

    • @AdityaSehgal 这不会解决所有问题。你的代码错了,看我的回答。
    • 胡安的观点是正确的——所以你最好考虑一下他刚才说的话。上面的代码在定义文件中很容易出错(我很确定我已经看到在 std 中使用命名空间来修补命名空间冲突)。代码仍然有效。
    • @AdamGalarneau 是的,如果尝试使用LLL_NWK::lllInit(),会导致链接器错误。
    • @AdamGalarneau:感谢您提供的信息。已进行必要的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    相关资源
    最近更新 更多