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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:42:04