为什么类中的公有变量访问不了

zqqq1 2005-06-23 10:38:39
我定义一个类,类中定义了一个CArray数组,如下:
class TargetArray

private:
CArray<Target,Target&> array;
public:
int GetSize();
Target GetAt(int position);
.....
};

class Target

public:
CString ID;
CString IP;
int maxConnect;
.........
}

然后我在mfc中加一个按钮,里面写上
TargetArray array;
然后作一些添加数组的工作,有没有都无所谓
array.GetAt(0).ID = "asdfas";
array.GetAt(0).maxConnect = 3; //主要这一行的错误
没有这一行,编译正常通过,有的话,报如下错误
error C2106: '=' : left operand must be l-value

我就不明白,同样的公有变量,怎么调用的方式会出错,我
试过,如果是bool型,也报这种错,只有CString正常,请问这
是怎么回事








...全文
230 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
coordinate 2005-06-24
  • 打赏
  • 举报
回复
sz_dong(摸索) 说的对。
至于“CString正常”是因为可以用返回值调用其成员函数,CString重载了“=”运算符,表面上用“=”赋值,其实调用的是函数。
umbrella1984 2005-06-24
  • 打赏
  • 举报
回复
回复人: truewill(无处不在) ( ) 信誉:100 2005-06-23 22:42:00 得分: 0


GetAt返回的是value不是reference

应该用ElementAt或者array[0]



仰慕
sz_dong 2005-06-24
  • 打赏
  • 举报
回复
是语法错误:不能给将一个返回值再进行赋值,而要将该返回值赋给一个变量,再对该变量进行赋值。
如 int Func(int x ){ return 10 }; 当然不能使用 Func(5)=3 !
coordinate 2005-06-24
  • 打赏
  • 举报
回复
CArray<Target,Target&> array;
有可能你有数组里保存的仅仅是一个引用,而原对象又偏偏被销毁了
goodboyws 2005-06-24
  • 打赏
  • 举报
回复
"GetAt函数没问题,函数体如下:
return array.GetAt(position);"
这里有问题
return array.GetAt(position);
应改为
return array[position];
第一个返回的不是引用值

zqqq1 2005-06-24
  • 打赏
  • 举报
回复
to fengfeiyu101(feng):
你说的非常对,有
而且你这么写确实可以通过,这我没有异议。可我想知道为什么
直接访问不行
fengfeiyu101 2005-06-24
  • 打赏
  • 举报
回复
楼主的TargetArray类中应该有void SetAt(int,Target)和int Add(Target)方法吧,然后将:
array.GetAt(0).ID = "asdfas";
array.GetAt(0).maxConnect = 3;
替换成:
Target tarGetTemp;
tarGetTemp.ID = "asdfas";
tarGetTemp.maxConnect = 3;
如果(GetSize==0)
array.Add(tarGetTemp);
其他
array.SetAt(0,tarGetTemp);
goodboyws 2005-06-24
  • 打赏
  • 举报
回复
Target GetAt(int position);
改为Target& GetAt(int position);
sz_dong 2005-06-24
  • 打赏
  • 举报
回复
Target TargetArray::GetAt(int position)
{
return this->array.ElementAt(position);
}

TargetArray a;
Target b;
a.GetAt(0).ID = "asdfas";
b = a.GetAt(0);
b.maxConnect= 3;
xiaoqiqixiao 2005-06-24
  • 打赏
  • 举报
回复
Target t = array.GetAt(0);
t.maxConnect = 3;
就可以了
没系统学过C++,不知道原因,查查函数返回对象方面的内容不就知道了
估计和临时对象,拷贝构造函数什么的有关吧
zqqq1 2005-06-24
  • 打赏
  • 举报
回复
GetAt函数没问题,函数体如下:
return array.GetAt(position);
to Zhymax(蓝点):
你的这种方法需要重载[]。这个我也做了,其结果和
GetAt是一样的
xqk 2005-06-24
  • 打赏
  • 举报
回复
是GetAt函数有问题吧应该
xqk 2005-06-24
  • 打赏
  • 举报
回复
有全角字符是小事儿,还没有extens [Target]呢
becool3000 2005-06-24
  • 打赏
  • 举报
回复
应该是取得int性的地址吧!
fengfeiyu101 2005-06-24
  • 打赏
  • 举报
回复
Target &GetAt(int position)这个不太好弄吧,如果里面的实现用的是return GetAt(),那引用的不就是临时变量了吗?
还有,楼主的意思应该是这样的吧:你要的不是如何解决功能问题,而是想明白为什么一个可以,一个不可以的问题吧?不知道我说的对不对
icansaymyabc 2005-06-24
  • 打赏
  • 举报
回复
class TargetArray

private:
CArray<Target,Target&> array;
public:
int GetSize();
Target &GetAt(int position); //这样改就OK了
.....
};

qrlvls 2005-06-24
  • 打赏
  • 举报
回复
直接从你的代码中 Copy 过来吧,怎么上面还有全角字符?
aben456 2005-06-24
  • 打赏
  • 举报
回复
GetAt() = ???
Get应该是读取
Set才是赋值吧
Zhymax 2005-06-23
  • 打赏
  • 举报
回复
array[0].ID = "asdfas";
array[0].maxConnect = 3;
truewill 2005-06-23
  • 打赏
  • 举报
回复
CString虽然成功,但内部的值实际上没有变得
加载更多回复(1)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧