类内定义了一个静态结构体数组,类外进行初始化,但是无法通过类名进行调用?


关注引自免费微信小程序:皆我百晓生
看起来你在尝试在类外部初始化静态结构体数组,并尝试通过类名来引用它,但是遇到了问题。在C++中,静态成员变量在类内部声明,但在类外部定义和初始化。对于静态结构体数组,你需要在类外部进行初始化和定义,然后通过类名和作用域解析运算符(::)来访问它。但是,有一点需要注意,静态成员属于类本身,而不是类的实例,因此你不能通过类的对象来访问静态成员。下面是一个可能的解决方案:
首先,确保你在类内部声明静态结构体数组时带有外部链接性。你可以通过在静态结构体数组的定义前添加关键字extern来实现这一点。在.h文件中,你的类定义应如下所示:
#pragma once
namespace demo {
class test1 {
public:
struct A {
int x;
int y;
};
static A B[256]; // 类内声明静态成员,使用extern关键字表示将在其他地方定义
};
}
然后,在.cpp文件中(全局范围),你需要定义并初始化这个静态结构体数组:
#include "demo.h"
// 类外定义和初始化静态结构体数组
demo::test1::A demo::test1::B[256] = {0}; // 使用作用域解析运算符(::)来定义和初始化静态成员
接下来,你可以通过类名和作用域解析运算符(::)来访问这个静态结构体数组:
int main() {
demo::test1::B[0].x = 5; // 通过类名和作用域解析运算符(::)来访问静态成员数组的第一个元素并设置其x值
// 其他代码...
}
这样应该可以解决你的问题。如果你仍然遇到问题或者有其他疑问,请随时向我询问。