在下列情况下,如何找出出错的地方?
在我的项目中,我有一个名为" 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.
这里发生了什么或我应该检查什么?
答案 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
放入命名空间而不是让它在全局命名空间中转移可能会很好。