小笨蛋 发表于 2012-7-14 17:53:29

MFC用CArray附近突然出错,高手来看看吧!

本帖最后由 小笨蛋 于 2012-7-14 18:05 编辑

CArray<UserInfo,UserInfo> UserArray;

class UserInfo
{
public:
        SOCKET *usersock;
        CString username;
        int status;//0:offline//1:confermed//

public:
        UserInfo();
        virtual ~UserInfo();
        void SetStatus(int s){status=s;}
        int GetStatus(int s){return status;}

};

运行以下就出错,
一行行注释都找不到毛病。。好像是user.username="";和UserArray.Add(user);不能同时出现                UserInfo user;
                user.username="";
                user.usersock=pSock;
                user.status=0;
                UserArray.Add(user);在调试模式下会出现这个对话框。之后就跳转到CString的=运算符重载函数的地方了。。

更奇怪的是我一开始没问题,之后不知怎么的就出错了,前面的我一点也没动啊

刚刚发现了。。
如果把第一个代码里面class UserInfo
{
public:
        SOCKET *usersock;
        CString username;
        int status;//0:offline//1:confermed//

public:
        UserInfo();
        virtual ~UserInfo();
        void SetStatus(int s){status=s;}
        int GetStatus(int s){return status;}

};中的        void SetStatus(int s){status=s;}
        int GetStatus(int s){return status;}
去掉,一切又正常了。。。
但是这样我的status就不能被赋值了,如果使用                                UserArray.GetAt(0).status=1;       
编译都不能通过,显示G:\Visual C++\Server\ServerDlg.cpp(341) : error C2106: '=' : left operand must be l-value
更想不通的是                                UserArray.GetAt(0).username=cname;和上面差不多啊,他却没有问题。真是邪了门
页: [1]
查看完整版本: MFC用CArray附近突然出错,高手来看看吧!