lostin9772 2024-07-08 10:04 采纳率: 0%
浏览 4

C++ 类内静态结构体数组无法引用

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

img

img

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-07-08 10:04
    关注

    引自免费微信小程序:皆我百晓生

    看起来你在尝试在类外部初始化静态结构体数组,并尝试通过类名来引用它,但是遇到了问题。在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值
        // 其他代码...
    }
    

    这样应该可以解决你的问题。如果你仍然遇到问题或者有其他疑问,请随时向我询问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月8日

悬赏问题

  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 Xsheii7我安装这个文件的时候跳出来另一个文件已锁定文件的无一部分进程无法访问。这个该怎么解决
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)
  • ¥15 服务端控制goose报文控制块的发布问题
  • ¥15 学习指导与未来导向啊