Visual Studio 2022开发CTP的问题汇总

当用C++20标准时,字符串字面量必须用const修饰,否则无法编译通过。
但是CTP的接口函数的参数类型是不带const的,接口函数的定义在动态链接库,无法修改。
要么改用C++17标准,要么修改代码来支持C++20标准。

注册前置地址函数原型

virtual void RegisterFront(char *pszFrontAddress) = 0;

对于字符串字面量

//不要用
const char *MdFrontAddr  ="tcp://180.168.146.187:10131";
//改成
char *MdFrontAddr = const_cast<char *>("tcp://180.168.146.187:10131");
//最简单
char MdFrontAddr[] = "tcp://180.168.146.187:10131";

订阅合约的函数原型如下

virtual int SubscribeMarketData(char *ppInstrumentID[], int nCount) = 0;

参数定义 char* ppInstrumentID[] = { "rb2410", "sc2407" };
报错:E0144 “const char *” 类型的值不能用于初始化 “char *” 类型的实体

修改配置,依次点击项目->属性->C/C+±>语言->符合模式,将原来的“是”改为“否”。
报错:C1214 模块与通过“/Zc:twoPhase-”请求的非标准行为发生冲突

改成:const char* ppInstrument[] = { "rb2410", "sc2407" };
报错:E0167 “const char **” 类型的实参与 “char **” 类型的形参不兼容
因为函数接受的是char *ppInstrumentID[],也就是char **类型, 又不能去修改接口,只能从代码上解决问题。

解决方案


const char *ppInstrument[] = {"rb2410", "sc2407"};
char **ptr= const_cast<char **>(ppInstrument);

chatgpt检查说是代码有问题,描述如下。

尝试使用 const_castconst char*[] 类型的数组指针 ppInstrument 转换为 char** 类型的指针 ptr,但是这种转换是不合法的,因为 const_cast 只能用于去除表达式的 constvolatile 修饰符,而不能改变指针指向的类型。

对于 const char*[] 类型的数组指针 ppInstrument,它指向的是一组指向常量字符的指针数组,而 char** 类型的指针 ptr 指向的是一个指向字符指针的指针,它们的类型不兼容。

我自己尝试可以编译通过,也可以正常使用。根据逻辑验证过,应该没有问题。

其他解决方案:

char* ppInstrument[] = { (char*)"rb2410", (char*)"sc2407" };

// 或者循环用const_cast
char *nonConstStrings[2];
for (int i = 0; i < 2; ++i) {
    nonConstStrings[i] = const_cast<char *>(strings[i]);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值