You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++访问定义在hpp和cpp文件的结构体成员输出垃圾值问题排查

问题根因及修复方案
  • 输出垃圾值的核心原因:你在main函数中定义的局部数组example::Map lut[3]没有做任何初始化操作,属于未赋值的栈变量,直接访问成员必然读取到随机垃圾值。你在example.cpp中完成初始化的是全局数组object,和局部变量lut无任何关联,没有直接访问已初始化的全局数组是你逻辑上的核心错误。
  • 额外存在的语法、设计问题:
    1. example类内定义的struct Map默认是私有访问权限,外部代码无法直接使用example::Map类型,需要给结构体声明加上public修饰符。
    2. example.hpp末尾的extern声明缺少分号,且main.cpp中重复定义了全局数组object,正确的写法是仅在头文件做extern声明,全局数组的定义仅保留在example.cpp中,否则会触发链接冲突。
    3. example类内定义的柔性数组成员object[]和全局数组重名,属于不必要的命名混淆,如果你没有用到类内的这个成员可以直接删除。
修正后的可运行代码

example.hpp

#include <string>
class example
{    
public:
    struct Map
    {
        int a;     
        int b;       
        std::string c;       
    };
};
extern example::Map object[3];

example.cpp

#include "example.hpp"
example::Map object[] =                                                   
{
    {2,3,"xx"},
    {2,4,"yy"},
    {2,6,"zz"},
};

main.cpp

#include "example.hpp"
#include <iostream>
int main()
{
    // 直接访问已完成初始化的全局object数组即可
    std::cout << object[0].a; 
    return 0;
}

内容的提问来源于stack exchange,提问作者Divs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 12:09:02