【问题标题】:Declaring variable in namespace [duplicate]在命名空间中声明变量[重复]
【发布时间】:2019-09-08 19:52:24
【问题描述】:

我想知道如何在命名空间中声明一个全局变量。

在general.h我有以下代码:

#include <iostream>

#pragma once

#ifndef TEST_NAMESPACE
#define TEST_NAMESPACE

namespace general
{
    int n;
}

#endif

在我的程序中,当我包含 general.h 时出现此错误:

错误 LNK2005 "int general::n" (?n@general@@3HA) 已在 general.obj

【问题讨论】:

  • 好吧,如果你有这个`_GEN_` - 不要。这些名称在 C++ 中是保留的——你不应该自己创建它们。
  • 您更改的名称仍然保留 - 任何以下划线和大写字母开头的名称都是保留的。
  • 好的,我又改了名字,但显然问题是我应该使用 extern 关键字

标签: c++ namespaces


【解决方案1】:

使用关键字extern 声明它并在.cpp 文件中定义。

另一种解决方案是使用inline 关键字。 inline 变量从 C++17 开始是可能的。了解更多关于他们的信息here

因此,实际上,(现已接受的)提案允许您使用 用于定义外部链接 const 命名空间范围的 inline 关键字 头文件中的变量或任何静态类数据成员,以便 包含该标头时产生的多个定义 链接器可以使用多个翻译单元——它只是选择 其中之一。

此外,您使用的一些标识符是保留的。有关更多信息,请参阅this

以下划线和大写字母开头的所有标识符 字母或其他下划线始终保留用于任何用途。

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 1970-01-01
    • 2014-01-20
    • 2016-04-30
    • 1970-01-01
    • 2019-09-30
    • 2013-08-12
    • 2012-11-15
    • 1970-01-01
    相关资源
    最近更新 更多