符号定义了多次

时间:2018-04-02 09:55:07

标签: c++ visual-studio-2017

在下列情况下,如何找出出错的地方?

在我的项目中,我有一个名为" appconstants.h"的头文件。 它包含一个全局变量:

#include <string>
using namespace std;
extern int                      g_iSpeakerLCID = 1031;

我在项目的一个cpp文件中使用此头文件。这很好用:

#include "appconstants.h"

现在当我在同一个项目的另一个cpp文件中声明相同的头时,我收到编译器错误

"int g_iSpeakerLCID (?g_iSpeakerLCID@@3HA) is already defined in compiler.obj.

这里发生了什么或我应该检查什么?

2 个答案:

答案 0 :(得分:1)

不要在extern声明中初始化 - 仅在定义点初始化。您的extern声明应仅为:

extern int g_iSpeakerLCID;

答案 1 :(得分:0)

尽管有勾号....

您可以在头文件中执行所有操作。将extern替换为inline。确保使用C / C ++设置属性 - &gt;语言 - &gt; C ++语言标准 - &gt; ISO C ++ 17。

#pragma once
#include <string>
inline int g_iSpeakerLCID = 1031;

using namespace std;放入头文件(或通常是生产代码中的任何位置)是一个糟糕的错误的想法。

此外,将g_iSpeakerLCD放入命名空间而不是让它在全局命名空间中转移可能会很好。