将结构声明为类成员的问题~~

时间:2023-01-15 14:28:04
我把一个结构体声明类的一个public成员,然后在类的初始化函数中用此结构声明一个变量,调试运行的时候报错说该结构体没有可用的默认构造函数,这是怎么回事?

14 个解决方案

#1


你的结构体怎么写的
你如何声明变量的?

#2


如果你的结构有构造函数,而构造函数又有非缺省的参数列表,就会这样
对于这样的结构,你必须用初始化列表来初始化他


struct myStruct{
  int a;
  myStruct{ int a_}{a=a_;};
};

class MyClass{
myStruct s;
   public:
        MyClass(int p):s(p){}; //<--注意这样的,C++教材一定说过

};

#3


引用 1 楼 akirya 的回复:
你的结构体怎么写的
你如何声明变量的?

我的结构体是这样写的:
public:

struct DATAINFO
{
int ID;
int InfoType;
CString InfoID;
};
};

这样声明变量的
	DATAINFO *pDataInfo=new DATAINFO;

#4


把你的结构体定义贴出来呀?
有可能是你结构体里面的类成员必须有一个带参数的构造函数。

#5


引用 2 楼 arong1234 的回复:
如果你的结构有构造函数,而构造函数又有非缺省的参数列表,就会这样
对于这样的结构,你必须用初始化列表来初始化他


struct myStruct{
int a;
myStruct{ int a_}{a=a_;};
};

class MyClass{
myStruct s;
public:
MyClass(int p):s(p){}; // <--注意这样的,C++教材一定说过

};
我的结构是声明成类的成员函数了,怎么还有构造函数尼,怎么写构造函数,写在哪儿?

#6


你那样写没问题啊.

#7


引用 6 楼 akirya 的回复:
你那样写没问题啊.
不会吧,说没有可用的默认构造函数,那怎么写默认构造函数?

#8


引用 7 楼 kezhon 的回复:
引用 6 楼 akirya 的回复:
你那样写没问题啊. 
不会吧,说没有可用的默认构造函数,那怎么写默认构造函数?

既然是默认的,还写默认,那就不是默认构造函数了

#9


我已经试过,你的写法完全没有问题,可以通过。
看看是不是其它地方的问题引起的。

#10


引用 9 楼 virtualfunction 的回复:
我已经试过,你的写法完全没有问题,可以通过。
看看是不是其它地方的问题引起的。
我这样改正之后我之前发生的问题就没了:
public:
 struct DATAINFO
 { 
int ID;
 int InfoType; 
CString InfoID;
DATAINFO()
{
   ID=0;
   InfoType=0;
   InfoID="";
}
 };

而你们都说之前的代码没有问题,这是为何?

#11


我将你的结构放在我的程序里面,调试通过。
其实,你的写法是MFC中许多类(如CPtrList等)的常用手法。
结构不需要构造函数的,不明白你怎么会有这样的结果。

#12


你的程序在警报级别不高的编译器重应该不会报告错误,但是即使你加了这个缺省构造函数,这个结构一样有问题的,最严重的问题是造成指针悬挂,参见: 论指针悬挂

程序中最容易的错误就是语法错误,当然要求你对语法理解真的好。在这个方面,楼主还是多花点时间把C++搞明白。语法错误之后,最难发现的就是诸如上面说的指针悬挂之类的逻辑错误了,这个编译器永远是不会告诉你的。


引用 10 楼 kezhon 的回复:
引用 9 楼 virtualfunction 的回复:
我已经试过,你的写法完全没有问题,可以通过。 
看看是不是其它地方的问题引起的。 
我这样改正之后我之前发生的问题就没了: 

C/C++ codepublic:
 struct DATAINFO
 { 
int ID;
 int InfoType; 
CString InfoID;
DATAINFO()
{
   ID=0;
   InfoType=0;
   InfoID="";
}
 };



而你们都说之前的代码没有问题,这是为何?

#13


指针悬挂?是什么意思?

#14


我看了那篇文章,但是还不太知道上面的问题可以如何解决?

#1


你的结构体怎么写的
你如何声明变量的?

#2


如果你的结构有构造函数,而构造函数又有非缺省的参数列表,就会这样
对于这样的结构,你必须用初始化列表来初始化他


struct myStruct{
  int a;
  myStruct{ int a_}{a=a_;};
};

class MyClass{
myStruct s;
   public:
        MyClass(int p):s(p){}; //<--注意这样的,C++教材一定说过

};

#3


引用 1 楼 akirya 的回复:
你的结构体怎么写的
你如何声明变量的?

我的结构体是这样写的:
public:

struct DATAINFO
{
int ID;
int InfoType;
CString InfoID;
};
};

这样声明变量的
	DATAINFO *pDataInfo=new DATAINFO;

#4


把你的结构体定义贴出来呀?
有可能是你结构体里面的类成员必须有一个带参数的构造函数。

#5


引用 2 楼 arong1234 的回复:
如果你的结构有构造函数,而构造函数又有非缺省的参数列表,就会这样
对于这样的结构,你必须用初始化列表来初始化他


struct myStruct{
int a;
myStruct{ int a_}{a=a_;};
};

class MyClass{
myStruct s;
public:
MyClass(int p):s(p){}; // <--注意这样的,C++教材一定说过

};
我的结构是声明成类的成员函数了,怎么还有构造函数尼,怎么写构造函数,写在哪儿?

#6


你那样写没问题啊.

#7


引用 6 楼 akirya 的回复:
你那样写没问题啊.
不会吧,说没有可用的默认构造函数,那怎么写默认构造函数?

#8


引用 7 楼 kezhon 的回复:
引用 6 楼 akirya 的回复:
你那样写没问题啊. 
不会吧,说没有可用的默认构造函数,那怎么写默认构造函数?

既然是默认的,还写默认,那就不是默认构造函数了

#9


我已经试过,你的写法完全没有问题,可以通过。
看看是不是其它地方的问题引起的。

#10


引用 9 楼 virtualfunction 的回复:
我已经试过,你的写法完全没有问题,可以通过。
看看是不是其它地方的问题引起的。
我这样改正之后我之前发生的问题就没了:
public:
 struct DATAINFO
 { 
int ID;
 int InfoType; 
CString InfoID;
DATAINFO()
{
   ID=0;
   InfoType=0;
   InfoID="";
}
 };

而你们都说之前的代码没有问题,这是为何?

#11


我将你的结构放在我的程序里面,调试通过。
其实,你的写法是MFC中许多类(如CPtrList等)的常用手法。
结构不需要构造函数的,不明白你怎么会有这样的结果。

#12


你的程序在警报级别不高的编译器重应该不会报告错误,但是即使你加了这个缺省构造函数,这个结构一样有问题的,最严重的问题是造成指针悬挂,参见: 论指针悬挂

程序中最容易的错误就是语法错误,当然要求你对语法理解真的好。在这个方面,楼主还是多花点时间把C++搞明白。语法错误之后,最难发现的就是诸如上面说的指针悬挂之类的逻辑错误了,这个编译器永远是不会告诉你的。


引用 10 楼 kezhon 的回复:
引用 9 楼 virtualfunction 的回复:
我已经试过,你的写法完全没有问题,可以通过。 
看看是不是其它地方的问题引起的。 
我这样改正之后我之前发生的问题就没了: 

C/C++ codepublic:
 struct DATAINFO
 { 
int ID;
 int InfoType; 
CString InfoID;
DATAINFO()
{
   ID=0;
   InfoType=0;
   InfoID="";
}
 };



而你们都说之前的代码没有问题,这是为何?

#13


指针悬挂?是什么意思?

#14


我看了那篇文章,但是还不太知道上面的问题可以如何解决?