这个构造函数哪里错了?怎么改?

自定义了一个结构体,调用出现错误:没有合适的构造函数??

struct stru_pack_data                  //自定义包结构
{
    string Myip;
    string Mymac;
    string MyGw;
    string Sip; 
    string Dip; 
    string Smac; 
    string Dmac; 
    string type_data;
    int Send_Port; 
    int Recv_Port;
    int ipMess_type; 
    int Ethernet_type; 
    stru_pack_data(string _Myip, string _Mymac, string _MyGw)// 构造函数
    {
        Myip = _Myip;
        Mymac = _Mymac;
        MyGw = _MyGw;
        Sip = "255.255.255.255";
        Dip = _Myip;
        Smac = "FFFFFFFFFFFF";
        Dmac = _Mymac;
        Send_Port = 67;
        Recv_Port = 5361;
        ipMess_type = 17;
        Ethernet_type = 8;
        type_data = "Release";
    }
}srpcdt,SRPCDT;
int  main()
{
    string data;
    srpcdt = stru_pack_data("192.168.31.188", "F0DEF1DFF5E9", "192.168.31.1"); //错误:stru_pack_data没有合适的构造函数
   cout << srpcdt.Myip << endl;
    return 0;
}

30行你定义了srpcdt,SRPCDT这两个结构体变量,会调用默认的无参构造函数。但由于结构体你新增了有参构造函数,那么你必须手工增加一个无参构造函数
规则:当结构体或类中没有任何构造函数时,默认的无参构造函数是有效的。但当你增加了有参构造函数后,默认的无参构造函数是无效的。当你仍旧要用无参构造函数时,就必须手工增加无参构造函数。
所以只需要增加:
stru_pack_data() {}
就可以了

该回答引用GPTᴼᴾᴱᴺᴬᴵ
根据您提供的代码,可以看出 stru_pack_data 结构体中只定义了一个构造函数,该构造函数需要传递3个参数。而在您的 main 函数中,您尝试调用了该结构体的默认构造函数,而默认构造函数并不存在,所以编译器就会提示错误。
-
解决该问题的方法是,将您在 main 函数中的代码修改为:

srpcdt = stru_pack_data("192.168.31.188", "F0DEF1DFF5E9", "192.168.31.1");

这样就可以通过您定义的构造函数对结构体进行初始化了。