jtwc 发表于 2023-5-30 12:59

C++如何实现下面的功能?

本帖最后由 jtwc 于 2023-5-30 13:02 编辑

各位老师,C++如何实现下面的功能呢?谢谢了
ThostFtdcOrderRefType      order_ref;                        //报单编号
TThostFtdcOrderRefType myorder_ref;            //新报单编号


void CustomTradeSpi::OnRspUserLogin(CThostFtdcRspUserLoginField* pRspUserLogin, CThostFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast)
{
      if (!isErrorRspInfo(pRspInfo)) {
                std::cout << "=====交易账户登录成功====" << std::endl;
                loginFlag = true;
                std::cout << "交易日:" << pRspUserLogin->TradingDay << std::endl;
                std::cout << "登录时间:" << pRspUserLogin->LoginTime << std::endl;
                std::cout << "经纪商:" << pRspUserLogin->BrokerID << std::endl;
                std::cout << "账户名:" << pRspUserLogin->UserID << std::endl;

                //保存会话参数
                trade_front_id = pRspUserLogin->FrontID;               // 前置编号
                session_id = pRspUserLogin->SessionID;                         // 会话编号
                atoi(pRspUserLogin->MaxOrderRef);   // 最大报单

                //将下单编号初始化
               //新报单编号=最大报单编号+1
                myorder_ref = atoi(pRspUserLogin->MaxOrderRef) + 1;
                        
                // 投资者结算结果确认
                reqSettlementInfoConfirm();

      }
}

出错
//新报单编号=最大报单编号+1
                myorder_ref = atoi(pRspUserLogin->MaxOrderRef) + 1;      
2      IntelliSense:表达式必须是可修改的左值      

as-modeus 发表于 2023-5-30 13:59

需要看你的TThostFtdcOrderRefType具体定义

caodansheng 发表于 2023-5-30 14:35

根据出错信息,表达式必须是可修改的左值,说明myorder_ref的类型是const或者引用类型,无法修改其值。需要将myorder_ref的类型改为非const的普通类型,例如:

```cpp
ThostFtdcOrderRefType myorder_ref; //声明为普通类型
```

同时需要确保ThostFtdcOrderRefType是C++内置的基本类型,或者是可以被赋值运算符=修改值的自定义类型。

jmxjiamingxu 发表于 2023-5-30 14:42

这个问chatgpt比较好

caodansheng 发表于 2023-5-30 14:46

这个错误是因为myorder_ref的类型是TThostFtdcOrderRefType,这个类型可能是一个const char*或者char,不能直接赋值,需要使用字符串拷贝函数来将新报单编号转换为相应的字符串类型。

可以使用以下代码实现:

//新报单编号=最大报单编号+1
int max_order_ref = atoi(pRspUserLogin->MaxOrderRef);
sprintf_s(myorder_ref, "%012d", max_order_ref + 1); //"%012d"表示将数字转换为12位长度的字符串,不足的用0填充

```
#include <iostream>
using namespace std;

class Calculator {
    private:
      float num1, num2;
    public:
      Calculator(float n1, float n2){
            num1 = n1;
            num2 = n2;
      }
      float add(){
            return num1 + num2;
      }
      float subtract(){
            return num1 - num2;
      }
      float multiply(){
            return num1 * num2;
      }
      float divide(){
            if (num2 == 0) {
                throw "Division by zero error!";
            }
            return num1 / num2;
      }
};

int main(){
    float n1, n2;
    cout << "Enter two numbers: ";
    cin >> n1 >> n2;
    Calculator calculator(n1, n2);
    try {
      cout << "Addition: " << calculator.add() << endl;
      cout << "Subtraction: " << calculator.subtract() << endl;
      cout << "Multiplication: " << calculator.multiply() << endl;
      cout << "Division: " << calculator.divide() << endl;
    } catch (const char* msg) {
      cerr << msg << endl;
    }

    return 0;
}
```

yk156511 发表于 2023-5-31 10:59

myorder_ref的赋值操作问题

jtwc 发表于 2023-6-2 12:04

谢谢各位老师,已解决。
页: [1]
查看完整版本: C++如何实现下面的功能?