1

我需要在 Visual Studio 项目中的多个 cpp 文件中编辑和访问一些变量。所以我创建了一个头文件,其名称空间包含我需要的所有变量,如下所示:

namespace windowdimension{
    TCHAR openwindows[20][180];
    int winnum = 0;
    int windowleft = 0;
    int windowright = 1360;
    INT windowtop = 0;
    INT windowbottom = 768;
    LONG leftarray[20];
    LONG rightarray[20];
    LONG toparray[20];
    LONG bottomarray[20];

}

但是,如果我#include将这个头文件放在两个源文件中,我会得到这个链接器错误 2005,说参数已经在另一个 obj 中定义。

在提到相同错误的其他问题时,我在这里知道

一个函数定义只能出现一次。#includes .h 文件的每个 .cpp 文件都将生成该函数的另一个副本。

但这也适用于命名空间变量吗?如果是这样,我们如何确保跨多个源文件访问特定变量?

4

2 回答 2

2

你永远不应该在头文件中定义全局变量。

为了能够共享,您需要在头文件中声明它们(使用extern关键字),并且在 .cpp 文件中只定义一次。

当然,永远不要忘记在每个头文件中包含保护(#pragma once是非常便携的解决方案):

全球.hpp

#pragma once

namespace global {
   extern int variable;
}

全球.cpp

namespace global {
   int variable = 0;
}

无论如何,使用全局变量是一种非常糟糕的做法。

于 2015-10-08T12:25:54.393 回答
0

您可能忘记添加包含防护

头文件.h

#ifndef HEADER_H
#define HEADER_H

namespace something {
}

#endif

另一种选择是#pragma once在头文件的开头使用。

于 2015-10-08T12:22:06.957 回答