大家好,我这里遇到一个问题,相当于class Curve :public CObject
{
public:
//数据
int getn(){return(2)};
}CArray <Curve ,Curve> m_arr;
m_arr.getn(); //这里出的错结果编译不通,我是初次用这个,不知怎样解决,谢谢大家。
{
public:
//数据
int getn(){return(2)};
}CArray <Curve ,Curve> m_arr;
m_arr.getn(); //这里出的错结果编译不通,我是初次用这个,不知怎样解决,谢谢大家。
解决方案 »
- CDialogBar 下面有两棵树。下面一那棵树插入结点是抖动。
- OnMouseActivate OnMouseClick OnLeftButtonDown这3个函数的区别何在?
- 多线程串口通信添加类文件
- ATL自绘edit如何响应回车键
- 怎样捕捉debug assertion fail?
- 在Com中怎么使用主进程的全局变量?
- MFC 与 WTL能混用吗?
- 加载图标到工具栏上以后,设置背景色为透明后,图标背景为黑色,请问怎么解决?
- 50分求一IP小问题
- constant int a=5;he int constant a=5;有什么区别?
- 请教#import
- 子线程调用主窗口的UpdateData遇到一些问题
m_arr.GetAt(m_arr.FindIndex(i));
m_arr.GetAt(m_arr.FindIndex(i)).getn();
吧?
{
Curve();
public:
//数据
int getn()
{return(2);}
};///////////
CArray <Curve ,Curve> m_arr;
m_arr.SetSize(3);
m_arr.GetAt(1).getn(); //这里出的错还是同一个错误,刚才输入错了,谢谢大家
改为m_arr.GetAt(m_arr.FindIndex(i)).getn();
m_arr.GetAt(m_arr.FindIndex(1)).getn();
注意m_arr.SetSize(3);没有m_arr.AddTail(...);是无用的数组
声明时把基类CObject 去掉就没毛病了,不知为什么,谢谢.
POSITION pos=arr.GetHeadPosition();
int var=1;
CArray <int,int &> m_Array;
m_Array.Add(var);
var=2;
m_Array.Add(var);
int m_pos=0;
int m_intVal=m_Array.GetAt(m_pos);//m_intVal=1
{
public:
Curve(){};
//数据
int getn()
{
return(2);
};
};//Test code
CArray <Curve ,Curve&> m_arr;
Curve m_x;
m_arr.Add(m_x);
Curve m_y;
int xxxx;
xxxx=m_arr.GetAt(0).getn();
class Curve :public CObject
{ public:
Curve();
//数据
int getn()
{return(2);}
};
如果去掉CObject 就没毛病了,
queue.Add(&t1);
queue.Add(&t2);
queue.Add(&t3);
queue.GetAt(0);
其中CTest类也是派生自CObject类,当我使用CArray<CTest,CTest> queue时也
出现问题,所以改用了上面的折中的办法,你看看有没有帮助
Curve m_x;
m_arr.Add(&m_x);
Curve m_y;
int xxxx;
xxxx=m_arr.GetAt(0)->getn();是可以的
CDib* Dib = new CDib();
if(Dib->Load(m_FileNameStrArr[i]) == TRUE)
m_DibArr.Add(*Dib);CDib = m_DibArr[0];
因为你定义的CArray要求传递CTest类型。由于值传递是需要进行复制的,而你的CTest类没有拷贝构造函数,因此不支持复制。
简单的办法是定义CArray<CTest*,CTest*> queue;
或者在CTest类中增加拷贝构造函数:
CTest(CTest &test);
一、存在问题:
1、在CArray <Curve ,Curve> m_arr语句中的第二参数即Curve表明往m_arr中写入数据时,函数需要一个
Curve对象,这就要求传值调用,因此要求Curve类中应该有复制构造函数Curve(const Curve&)。
2、这样编译还是有一个错,在CArray类中的SetAtGrow函数中有一个类似于Curve=Curve的语句,然而在Curve类中没有重载运算符“=”,所以在这时需要重载“=”运算符。
具体代码如下:
class Curve :public CObject
{
public:
//数据
int i;
Curve(const Curve&);
operator =(Curve&);
int getn(){return(2)};
}Curve::Curve(const Curve& temp)
{
数据的复制如:
i=temp.i;
}Curve::operator =(Curver& temp)
{
对象之间的拷贝即对象内部数据的拷贝如:
i=temp.i;
}
两个函数的代码是一样的当用处不一样,要好好理解程序运行的过程才能真正做好。
欢迎联系