Cod*_*lus 2 c++ namespaces definition
我有两个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
Run Code Online (Sandbox Code Playgroud)
现在我有一个main.cpp文件:
#include "Trans.h"
#include "Space.h"
int main()
{
double pos = Trans::calcDeltaPositions();
Space::calcAccel(Trans::Delta);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我一直得到一个错误,声称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];
Run Code Online (Sandbox Code Playgroud)