C++命名空间并乘以定义的变量
C++ namespaces and multiply defined variables
我有两个C++命名空间,如下所示:
#ifndef TRANS_H
#define TRANS_H
namespace Trans
{
double Delta[3];
double calcDeltaPositions();
//and more that I will leave out for simplicity
};
#endif
#ifndef SPACE_H
#define SPACE_H
namespace Space
{
double vels[3];
void calcAccel(double DeltaVal[3]);
};
#endif
现在我有一个主文件.cpp文件:
#include "Trans.h"
#include "Space.h"
int main()
{
double pos = Trans::calcDeltaPositions();
Space::calcAccel(Trans::Delta);
return 0;
}
我不断收到一个错误,声称 Delta 是在 main.o 和 Trans.o 中定义的乘法,因为我只声明 Delta 存在于 Trans 中,这怎么可能?
如果文件Trans.h
和Space.h
包含在多个翻译单元中(cpp 文件 - 在您的情况下,包括main.cpp
和trans.cpp
),您将多次定义变量,从而破坏一个定义规则。
如果需要全局变量,则需要将变量声明为 extern
并在单个实现文件中定义它。
如果你想要每个翻译单元的变量副本(可能不是),你可以将其声明static
。
这怎么可能,因为我只宣布 Delta 存在于 Trans?
其实,你没有。这是一个定义,而不是一个声明。
//Trans.h
namespace Trans
{
extern double Delta[3];
};
//Trans.cpp
double Trans::Delta[3];
相关文章:
- 在头文件中定义变量不会出错
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 在命名空间中定义变量
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- 用不同类型重新定义变量
- 具有全局定义变量的递归比没有全局定义变量的递归函数获得更多的堆栈.为什么?(跳入C++)
- 定义变量类型
- 在命名空间中定义变量,但在测试中获取空值
- cmake没有定义变量
- C 中的继承:在亲子类中定义变量
- 在同一函数中定义变量及其静态等效项
- 如何在 Tensorflow C++ 中定义变量的自定义有状态 Op 保存值
- 如何将 int 和 int* 传递到函数中以定义变量
- 在定义变量时调用类函数
- 定义变量与模板
- 定义变量类型
- 为什么您可以在 switch 语句中的"默认"下定义变量,而不能在"case"下定义变量
- C 如何基于另一个变量和某些算术定义变量的值
- C 可以指向具有定义变量的函数
- C 定义变量设置值