我已经定义了一个类:CPoint我想搞成动态数组
CPoint *AM;
AM=new CPoint[4];编译的时候报错,请教达人应该怎么写?

解决方案 »

  1.   

    E:\小地区控制测量\Test\Test.cpp(12) : error C2512: 'CPoint' : no appropriate default constructor available是不是因为缺省构造函数的问题?
      

  2.   

    把你的CPoint的定义和实现贴出来;
      

  3.   

    //定义角度类
    class CDegree
    {
    public:
    int D,M,S;
    void Cout();
    CDegree()
    {
    D=0;
    M=0;
    S=0;
    };
    CDegree(int x,int y,int z)
    {
    D=x;
    M=y;
    S=z;
    };
    //重载运算符
    CDegree(CDegree &com)
    {
    D=com.D;
    M=com.M;
    S=com.S;
    };
    CDegree operator+(CDegree);
    CDegree operator-(CDegree);
    CDegree operator*(float);
    CDegree operator/(int);
    void operator=(CDegree);
    bool operator<=(CDegree);
    };void CDegree::Cout()
    {
    cout<<D<<M<<S;
    }CDegree CDegree::operator + (CDegree d)
    {
    int i=0,j=0,k=0; i=i+S+d.S;
    if (i>=60)
    {
    i=i-60;
    j++;
    }; j=j+M+d.M;
    if (j>=60)
    {
    j=j-60;
    k++;
    }; k=k+D+d.D; return CDegree(i,j,k);
    }CDegree CDegree::operator - (CDegree d)
    {
    int i=0,j=0,k=0; i=i+S-d.S;
    if (i<0)
    {
    i=i+60;
    j--;
    } j=j+M-d.M;
    if (j<=0)
    {
    j=j+60;
    k--;
    } k=k+D-d.D; return CDegree(i,j,k);
    }CDegree CDegree::operator * (float a)
    {
    int i=0,j=0,k=0; i=i+(int)floor(S*a);
    j=j+(int)i/60;
    i=i%60; j=j+(int)floor(M*a);
    k=k+(int)j/60;
    j=j%60; k=k+(int)floor(D*a); return CDegree(i,j,k);
    }CDegree CDegree::operator / (int a)
    {
    int i=0,j=0,k=0; i=(int)D/a;
    j=D%a*60+M;
    k=k+j%60*60+S;
    j=(int)j/a;
    k=(int)k/a; return CDegree(i,j,k);
    }void CDegree::operator = (CDegree d)
    {
    D=d.D;
    M=d.M;
    S=d.S;
    }bool CDegree::operator <= (CDegree d)
    {
    if (D<d.D)
    return 1;
    else
    //{
    if (D=d.D)
    //{
    if (M<d.M)
    return 1;
    else
    //{
    if (M=d.M)
    //{
    if (S<d.S)
    return 1;
    else
    //{
    if (S=d.S)
    return 1;
    else
    return 0;
    //};
    //};
    else return 0;
    //};
    //};
    else return 0;
    //}
    }//定义坐标点类class CPoint
    {
    public:
    CDegree Angle,DAngle,CorrectAngle,FixAngle;
    float D,DeltaX,DeltaY,DX,DY,CorrectX,CorrectY,X,Y;
    CPoint(CDegree a,float Distance)
    {
    Angle=a;
    D=Distance;
    }
    };
      

  4.   

    //定义角度类
    class CDegree
    {
    public:
    int D,M,S;
    void Cout();
    CDegree()
    {
    D=0;
    M=0;
    S=0;
    };
    CDegree(int x,int y,int z)
    {
    D=x;
    M=y;
    S=z;
    };
    //重载运算符
    CDegree(CDegree &com)
    {
    D=com.D;
    M=com.M;
    S=com.S;
    };
    CDegree operator+(CDegree);
    CDegree operator-(CDegree);
    CDegree operator*(float);
    CDegree operator/(int);
    void operator=(CDegree);
    bool operator<=(CDegree);
    };void CDegree::Cout()
    {
    cout<<D<<M<<S;
    }CDegree CDegree::operator + (CDegree d)
    {
    int i=0,j=0,k=0; i=i+S+d.S;
    if (i>=60)
    {
    i=i-60;
    j++;
    }; j=j+M+d.M;
    if (j>=60)
    {
    j=j-60;
    k++;
    }; k=k+D+d.D; return CDegree(i,j,k);
    }CDegree CDegree::operator - (CDegree d)
    {
    int i=0,j=0,k=0; i=i+S-d.S;
    if (i<0)
    {
    i=i+60;
    j--;
    } j=j+M-d.M;
    if (j<=0)
    {
    j=j+60;
    k--;
    } k=k+D-d.D; return CDegree(i,j,k);
    }CDegree CDegree::operator * (float a)
    {
    int i=0,j=0,k=0; i=i+(int)floor(S*a);
    j=j+(int)i/60;
    i=i%60; j=j+(int)floor(M*a);
    k=k+(int)j/60;
    j=j%60; k=k+(int)floor(D*a); return CDegree(i,j,k);
    }CDegree CDegree::operator / (int a)
    {
    int i=0,j=0,k=0; i=(int)D/a;
    j=D%a*60+M;
    k=k+j%60*60+S;
    j=(int)j/a;
    k=(int)k/a; return CDegree(i,j,k);
    }void CDegree::operator = (CDegree d)
    {
    D=d.D;
    M=d.M;
    S=d.S;
    }bool CDegree::operator <= (CDegree d)
    {
    if (D<d.D)
    return 1;
    else
    //{
    if (D=d.D)
    //{
    if (M<d.M)
    return 1;
    else
    //{
    if (M=d.M)
    //{
    if (S<d.S)
    return 1;
    else
    //{
    if (S=d.S)
    return 1;
    else
    return 0;
    //};
    //};
    else return 0;
    //};
    //};
    else return 0;
    //}
    }//定义坐标点类class CPoint
    {
    public:
    CDegree Angle,DAngle,CorrectAngle,FixAngle;
    float D,DeltaX,DeltaY,DX,DY,CorrectX,CorrectY,X,Y;
    CPoint(CDegree a,float Distance)
    {
    Angle=a;
    D=Distance;
    }
    };
      

  5.   

    CPoint没有明确的缺省构造
    应该有个CPoint();
      

  6.   

    因为构造函数是CPoint(CDegree a,float Distance)
    AM=new CPoint[4];
    没有指定参数,无法构造。
    AM = new CPoint(a,d) ;这样是可以的
    如果不实现缺省CPoint(),我就不知道该怎样new了
      

  7.   

    可以
    但你要搞清楚数组指针和指针数组的概念你这个 可以这样CPoint* AM[4];
    for(int i=0;i<4;++i)
    {
       AM[i] = new CPoint(a,d);
    }