“CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明)

本文分享了一次C++工程编译过程中遇到的错误:尝试为非指针类型的局部变量赋值新对象的问题。通过检查代码,作者发现了直接实例化的对象不能被重新赋值为另一个新对象,并给出了正确的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++工程编译报错:

“CObject::operator =”: 无法访问 private 成员(在“CObject”类中声明) 

错误无法直接定位源码位置,网上搜索了,也和我的代码不一样。

最后还是自己认真检查代码,发现了个问题

头文件定义了一个CEvent x,

源码文件中使用了 x = new CEvent(true,false);

原来是这里错误了,x是一个直接实例化了的对象,不能再指向另一个实例,只有指针才能这样用。

于是改为CEVent* x;就可以了。

``` class tagMTFTesterResult { public: string Final; // 最终结果 string MTF; // MTF结果 string DOF; // DOF结果 string FocalShift; // 场曲结果 string Astigmatism; // 像散结果 string FOV; // FOV结果 tagMTFTesterResultAverage Average; // 均值管控测试结果 string Aggregate; // 综合结果 string MultiFrqMTF; // 辅助频率结果 string Fail_Reason; // 失败原因 map<string, variant> toVariantMap() const { map<string, variant> resultMap; // 使用结构化绑定提升可读性(C++17) resultMap = { {"Final", Final}, {"MTF", MTF}, {"DOF", DOF}, {"FocalShift", FocalShift}, {"Astigmatism", Astigmatism}, {"FOV", FOV}, {"Aggregate", Aggregate}, {"MultiFrqMTF", MultiFrqMTF}, {"Fail Reason", Fail_Reason}, {"Average", Average.toVariantMap()} // 要求子结构体实现相同接口 }; return resultMap; } }; class TestData: public CObject { DECLARE_SERIAL(TestData) // 启用序列化 public: TestData() = default; // 默认构造函数 // 拷贝构造函数 TestData(const TestData& other) { CopyMembers(other); } // 赋值运算符 TestData& operator=(const TestData& other) { if (this != &other) { CopyMembers(other); } return *this; } public: // 成员变量 std::string Barcode; std::string CameraCounts; std::vector<string> GroupDefine; tagMTFTesterResult result; public: // 序列化方法(返回std::map替代QVariantMap) map<string, variant> toVariantMap() const { } TestData fromVariant(variant) {} private: // 辅助函数:深拷贝成员变量 void CopyMembers(const TestData& other) { result = other.result; } };```map<string, variant>报错
最新发布
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值