自定义了一个结构体,调用出现错误:没有合适的构造函数??
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");
这样就可以通过您定义的构造函数对结构体进行初始化了。