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

VS编译C++ aegis库示例时xutility报C2664 asio参数转换错误

错误诱因

该编译错误是依赖库版本不兼容导致的:

  • 你本地使用了最新的asio开发版(asio-master分支),而aegis库依赖的websocketpp版本较旧,二者API不匹配。
  • 从错误栈可以定位到问题源头在websocketpp/transport/asio/security/none.hpp第172行:老版websocketpp构造tcp::socket时,传入了std::reference_wrapper<asio::io_context>类型的右值作为参数,而新版asio的asio::ip::tcp::socket构造函数要求第一个参数是asio::io_context的左值引用,std::reference_wrapper右值无法绑定到非const左值引用参数,最终触发C2664报错。
修复方案

你可以任选以下一种方案解决:

  1. 降级asio版本
    卸载当前的asio-master开发版,改用asio 1.22.x及更早的稳定版本,旧版本asio的socket构造逻辑兼容websocketpp的传参方式。
  2. 修改websocketpp源码
    打开报错的websocketpp/transport/asio/security/none.hpp文件,定位到第172行构造socket的代码,原代码类似:
    socket_ = std::make_shared<asio::ip::tcp::socket>(std::ref(io_context));
    
    修改为调用.get()取出reference_wrapper包装的实际io_context左值:
    socket_ = std::make_shared<asio::ip::tcp::socket>(std::ref(io_context).get());
    
    同目录下tls.hpp文件如果存在相同的socket构造逻辑,也做同样修改即可。
  3. 优先使用aegis自带的asio
    如果aegis库本身捆绑了兼容版本的asio,调整你项目的头文件包含优先级,将aegis附带的asio路径放到你本地asio-master路径之前,让编译器优先使用aegis自带的asio头文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:27:00