我定义了以下几个类在应用程序中使用的结构.
ZHTypes.h
#ifndef ZHTypes_h
#define ZHTypes_h
struct BeingHitParams
{
bool isApplyKnockBack=true;
};
BeingHitParams *default_BeingHitParams_ptr = new BeingHitParams();
#endif
Run Code Online (Sandbox Code Playgroud)
我定义了一个跟随变量
default_BeingHitParams_ptr
Run Code Online (Sandbox Code Playgroud)
对于这种情况,我将在几个地方使用它作为函数的默认参数,因为我不需要一直创建一个新的结构.
无论如何,每当我在类中的代码中引用它时,上面定义的变量就会产生链接错误.但如果我在前面添加静态,那么它可以正常工作.
static BeingHitParams *default_BeingHitParams_ptr = new BeingHitParams();
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么我们不能从类中访问全局但非静态的变量?我还想知道为什么C++在访问变量时受到限制的其他解释,就像上面的情况一样.
如果你放在static它前面,那么你给它内部链接,每个包含该标题的翻译单元都有自己的副本default_BeingHitParams_ptr.你真正想要做的是extern在头文件中声明它(它不仅使它具有外部链接,而且使它成为声明而不是定义),然后在单个翻译单元中定义它:
// ZHTypes.h
// Now this is just a declaration:
extern BeingHitParams *default_BeingHitParams_ptr;
// ZHTypes.cpp
// Defined in a single translation unit:
BeingHitParams* default_BeingHitParams_ptr = new BeingHitParams();
Run Code Online (Sandbox Code Playgroud)
然而,引入全球状态通常是一件坏事.
| 归档时间: |
|
| 查看次数: |
931 次 |
| 最近记录: |