定义了一个类,用指针的方法建立了一个类组。但是在编写一个函数来对这个类组里面的数据进行统计运算的时候出现了问题。程序如下://修正转折角
void AngleCorrect(CPoint *p,int n)
{
int i=0;
CDegree Full(360,0,0),Fact(0,0,0),Perrmit(0,0,60),Err;
for(i=0;i<n-1;i++)
if (p[i]!=NULL)
Fact=Fact+*p[i].Angle;
Err=Fact-Full;
Perrmit=Perrmit*sqrt(5);
Err.Cout();
cout<<"\n";
Perrmit.Cout();
cout<<"\n";
//if (Err<=Perrmit)
//{
for(i=0;i<n-2;i++)
{
*p[i].DAngle=Err/n;
*p[i].CorrectAngle=*p[i].Angle-*p[i].DAngle;
*p[n-1].CorrectAngle=*p[n-1].Angle+*p[i].DAngle;
};
p[n-1].CorrectAngle=p[n-1].CorrectAngle-Err;
//}
}
定义类组的过程如下:
CPoint *AM;
AM=new CPoint[5];
void AngleCorrect(CPoint *p,int n)
{
int i=0;
CDegree Full(360,0,0),Fact(0,0,0),Perrmit(0,0,60),Err;
for(i=0;i<n-1;i++)
if (p[i]!=NULL)
Fact=Fact+*p[i].Angle;
Err=Fact-Full;
Perrmit=Perrmit*sqrt(5);
Err.Cout();
cout<<"\n";
Perrmit.Cout();
cout<<"\n";
//if (Err<=Perrmit)
//{
for(i=0;i<n-2;i++)
{
*p[i].DAngle=Err/n;
*p[i].CorrectAngle=*p[i].Angle-*p[i].DAngle;
*p[n-1].CorrectAngle=*p[n-1].Angle+*p[i].DAngle;
};
p[n-1].CorrectAngle=p[n-1].CorrectAngle-Err;
//}
}
定义类组的过程如下:
CPoint *AM;
AM=new CPoint[5];
if (p[i]!=NULL)
Fact=Fact+*p[i].Angle;
应该是
if(p!=NULL)
Fact=Fact+p[i].Angel;后面是一样的,不应该使用*p[i]
if (p[i]!=NULL) -> if((p+i)!=NULL)
Fact=Fact+*p[i].Angle; -> Fact=Fact + p[i].Angle;
and so on
CPoint *AM;
AM=new CPoint[5];我对AM[0]的成员变量直接赋值后也是无法正确输出的,我在运行的过程中插入断点观察,AM[0]的成员变量的值为 地址,可能是定义类组的时候用法不对。最近正在开发一个小地区控制测量的软件,刚从VB编程转过来,C++特别不习惯,很多用法不懂,有达人愿意加QQ或者MSN带带我吗?181003559 [email protected]
#include <iostream>
using namespace std;
#include <math.h>struct CDegree
{
CDegree(){}
CDegree(int a,int b,int c){};
int _a;
int _b;
int _c;
void Cout(){};
CDegree operator + (const CDegree& deg)
{
return *this;
}
CDegree operator - (const CDegree& deg)
{
return *this;
}
CDegree operator * (const CDegree& deg)
{
return *this;
}
CDegree operator / (const CDegree& deg)
{
return *this;
}
CDegree operator * (float f)
{
return *this;
}
CDegree operator / (float f)
{
return *this;
}};struct CPoint
{
CDegree Angle;
CDegree DAngle;
CDegree CorrectAngle;
};//修正转折角
void AngleCorrect(CPoint *p,int n)
{
int i=0;
CDegree Full(360,0,0),Fact(0,0,0),Perrmit(0,0,60),Err;
for(i=0;i<n-1;i++)
Fact=Fact+p[i].Angle;
Err=Fact-Full;
Perrmit=Perrmit*sqrt(5.);
Err.Cout();
cout<<"\n";
Perrmit.Cout();
cout<<"\n";
//if (Err<=Perrmit)
//{
for(i=0;i<n-2;i++)
{
p[i].DAngle=Err/n;
p[i].CorrectAngle=p[i].Angle-p[i].DAngle;
p[n-1].CorrectAngle=p[n-1].Angle+p[i].DAngle;
};
p[n-1].CorrectAngle=p[n-1].CorrectAngle-Err;
//}
}
void main()
{
CPoint *AM;
AM=new CPoint[5];
AngleCorrect(AM,sizeof(AM) / sizeof(AM[0]));
}
这个东西我以后还要在CPoint类里面加入对话框进行数据输入,不知道用这种类的方法可不可以实现?还是很谢谢
AM[0].?1,AM.?2没有赋值?
那就是CPoint的构造函数有问题了。
不会用指针,所以我怀疑AM=new CPoint[5] 有问题,但是不知道问题出在哪里。
至于怎么new和delete,就要重载new和delete了,就像你重载+,-,*,/一样
private:
static HANDLE m_sHeap;
static int m_sAllocedInHeap;
public:
LPVOID operator new(size_t size);
void operator delete(LPVOID pVoid);
}……
HANDLE m_sHeap = NULL;
int m_sAllocedInHeap = 0;
LPVOID CVMShow::operator new(size_t size)
{
if (m_sHeap == NULL)
m_sHeap = HeapCreate(HEAP_GENERATE_EXCEPTIONS, 0, 0);
LPVOID pVoid = HeapAlloc(m_sHeap, 0, size);
if (pVoid == NULL)
return NULL;
m_sAllocedInHeap++;
return pVoid;
}
void CVMShow::operator delete(LPVOID pVoid)
{
if (HeapFree(m_sHeap, 0, pVoid))
m_sAllocedInHeap--;
if (m_sAllocedInHeap == 0)
{
if (HeapDestory(m_sHeap))
m_sHeap = NULL;
}
}