C++使用std::async调用类方法报非静态成员非法引用错误如何解决
错误原因
- 报错与
std::async的使用无关,错误触发点为Test类的show()方法实现 Status结构体中定义的Available是普通非静态成员变量,必须通过Status类的实例访问,不能直接使用Status::Available的类域语法访问,只有静态类成员支持该访问方式- 额外隐藏问题:
Test类的构造函数仅声明未定义,修复成员访问错误后仍会触发链接报错
修复方案
修改两处核心问题:1. 调整show()方法的访问逻辑,指向Test类私有成员_status的Available属性;2. 补全Test类构造函数的实现。
修复后的完整可运行代码如下:
#include <future> #include <iostream> struct Status { std::string Available; std::string Connected; std::string DisConnected; }; class Test { public: // 补全构造函数实现 Test() = default; Status &status() { return _status; } void setStatus(const Status &newStatus) { _status = newStatus; } std::string show() { // 修改为访问实例成员_status的Available属性 return _status.Available; } private: Status _status ; }; int main() { Test tst; // 可额外给Available赋值验证输出,例如: // Status s; // s.Available = "available"; // tst.setStatus(s); auto value= std::async([](std::string str) { return str;} ,tst.show()); std::cout <<value.get(); return 0; }
内容的提问来源于stack exchange,提问作者Parisa.H.R
相关产品推荐
相关产品推荐

