MFC中CString赋值出错
typedefystructABC{CStringstr;structABC*next;}ABC;CStrings;ABC*p=(ABC*)malloc(sizeof(A...
typedefy struct ABC
{
CString str;
struct ABC *next;
} ABC;
CString s;
ABC *p=(ABC*)malloc(sizeof(ABC));
p->str=s;//出错Unhandled exception.....
单步跟踪的话会停在 stringSrc.GetData()->nRefs < 0 这里
这是说不能这样赋值吗? 展开
{
CString str;
struct ABC *next;
} ABC;
CString s;
ABC *p=(ABC*)malloc(sizeof(ABC));
p->str=s;//出错Unhandled exception.....
单步跟踪的话会停在 stringSrc.GetData()->nRefs < 0 这里
这是说不能这样赋值吗? 展开
4个回答
展开全部
不是不能赋值,这讲起来内容就多了,涉及到C++底层的一些知识。
你现在这种用法是把struct ABC当做一种数据结构来用,当然针对struck结构
ABC *p=(ABC*)malloc(sizeof(ABC));
p->str=s;
这种用法是无可厚非的,毛病出在你在这个struck里定义了一个类对象CString,
在C++有关构造函数的知识里,一个类A里如果包含有B类的对象,那么在这个A类定义对象时,编译器会在A类的构造函数里调用B的构造函数。
好了,矛盾出来了,struct ABC你是当结构体用的,没有所谓的构造函数,那么结构体里的str就没被构造,所以就会出现很多问题,具体出在哪我也不知道,那得去看CString源码。
由此,有二种改法,一个是把malloc改成new,一个是把CString改成内置类型,比如说char
你现在这种用法是把struct ABC当做一种数据结构来用,当然针对struck结构
ABC *p=(ABC*)malloc(sizeof(ABC));
p->str=s;
这种用法是无可厚非的,毛病出在你在这个struck里定义了一个类对象CString,
在C++有关构造函数的知识里,一个类A里如果包含有B类的对象,那么在这个A类定义对象时,编译器会在A类的构造函数里调用B的构造函数。
好了,矛盾出来了,struct ABC你是当结构体用的,没有所谓的构造函数,那么结构体里的str就没被构造,所以就会出现很多问题,具体出在哪我也不知道,那得去看CString源码。
由此,有二种改法,一个是把malloc改成new,一个是把CString改成内置类型,比如说char
展开全部
CString *t = new(p)CString();
把这一行加到ABC *p=(ABC*)malloc(sizeof(ABC));之后
原因是你的CString str没有构造。
把这一行加到ABC *p=(ABC*)malloc(sizeof(ABC));之后
原因是你的CString str没有构造。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CString s;
s = "something";
ABC *p = new ABC;
p->str=s;//出错Unhandled exception.....
s = "something";
ABC *p = new ABC;
p->str=s;//出错Unhandled exception.....
追问
s="something";//没错误
p->str="something";//出错
p->str=s;//出错
有没有什么解决方法
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不是有CSTRINGLIST
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询