初始化全局函数内的静态成员
Initialization of a static member inside a global function
我的代码如下:
class myClass{
public:
static int a;
};
void myFunc()
{
int myClass::a = 1;
}
我看到以下编译错误错误C2655:"myClass::a":定义或重新声明在当前作用域中非法
我做了以下改变,一切都很好。知道吗?
class myClass{
public:
static int a;
};
int myClass::a = 1;
void myFunc()
{
}
逻辑思考如下:
如果从未调用myFunc()
,则不会定义myClass::a
。因此,它必须在全球范围内。
在您的第一个代码片段中,即使没有定义myClass::a
,也可能使用它,因此它是不允许的,并且以前的语法是无效的C++。
静态变量必须在程序启动前初始化,因此如果在函数中初始化它,则可能根本不会初始化它。因此编译器应该将其视为错误。静态变量是在编译时(程序运行之前(分配的。希望得到帮助。
如果在函数中定义静态成员数据,则它的链接是函数内部的。它们所需的联系是全球性的。
相关文章:
- 如何在C++中使用非静态成员函数作为回调函数
- 静态成员函数使用相同的名称时出现模板类型名称错误
- 在 nullptr 上调用无状态类的非静态成员函数是否合法?
- 为什么传递非静态成员函数会导致编译错误?
- 处理类内的回调时,必须调用对非静态成员函数的引用
- 非静态成员函数的 decltype 格式不正确吗?
- std::异步与非静态成员函数
- C++无效使用非静态成员函数?
- 未使用的C++未优化的静态成员函数/变量
- C++:如何返回指向非静态成员函数的指针?
- 使用静态成员函数而不是普通函数是否有任何开销?
- 在 stream_descriptor::async_wait 中无效使用非静态成员函数
- 为什么我不能像这样在静态成员函数中调用静态成员变量?
- 无法在clang Linux中分配非静态成员函数,但我可以在Visual Studio Windows中分配
- 在类定义中推导内联静态成员函数的返回类型
- `enable_if()`以禁用模板化类的静态成员函数声明
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 常量静态成员函数
- 使用 vector.sort() 的非静态成员函数无效使用
- 从静态成员函数访问私有非静态类变量 - C++