這個程序編譯出錯…………


#include<iostream>
#include<cmath>
const double PI=3.1416;
using namespace std;
class shape
{
public:
shape(double w=0) {
r=w;
}
virtual double Area()=0;
protected:
double r;
};
class circle:public shape
{
circle(double g=0):shape(g)
{
}
double Area()
{

double s=PI*r*r;
return s;
}
};
class square:public shape
{
square(double a=0,double b=0):shape(a),l(b) {}
double Area()
{

double s=l*r;
}
protected:
double l;
};
class triangle:public shape
{
triangle(double c=0,double e=0,double d=0):shape(c)
{
r1=e;
angle=PI*d/180.0;
}
double Area()
{
double s=0.5*r*r1*sin(angle);
return s;
}
protected:
double r1;
double angle;
};
double fun(shape *p)
{
return p->Area();
}

int main()
{
square sq(1,1);
triangle tr(1,1,45);
circle ci(1);
shape *p;
double s=0;
p=&sq;
cout<<"正方形面積是:"<<fun(p)<<endl;
s+=fun(p);
p=&tr;
cout<<"三角形面積是:"<<fun(p)<<endl;
s+=fun(p);
p=&ci;
cout<<"圓形的面積是:"<<fun(p)<<endl;
s+=fun(p);

cout<<"三圖形總面積是:"<<s<<endl;


return 0;
}


形狀.cpp
C:\Documents and Settings\Administrator\桌面\形狀.cpp(61) : error C2248: 'square::square' : cannot access private member declared in class 'square'
        C:\Documents and Settings\Administrator\桌面\形狀.cpp(29) : see declaration of 'square::square'
C:\Documents and Settings\Administrator\桌面\形狀.cpp(62) : error C2248: 'triangle::triangle' : cannot access private member declared in class 'triangle'
        C:\Documents and Settings\Administrator\桌面\形狀.cpp(40) : see declaration of 'triangle::triangle'
C:\Documents and Settings\Administrator\桌面\形狀.cpp(63) : error C2248: 'circle::circle' : cannot access private member declared in class 'circle'
        C:\Documents and Settings\Administrator\桌面\形狀.cpp(17) : see declaration of 'circle::circle'
執行 cl.exe 時出錯.


各位高手幫幫忙

8 个解决方案

#1


你的square類,triangle類和circle類中的構造函數默認都是private訪問權限,修改為public即可,我想你是忘記加public標記了,不寫的話,默認是private訪問的,這個和struct結構體不同,struct中如果不寫,默認的是public訪問的。
還有你的square類的double Area()函數需要返回一個double類型的值。
代碼幫你修改完成:

#include<iostream>
#include<cmath>
const double PI=3.1416;
using namespace std;
class shape
{
public:
shape(double w=0) {
r=w;
}
virtual double Area()=0;
protected:
double r;
};
class circle:public shape
{
public:
circle(double g=0):shape(g)
{
}
double Area()
{

double s=PI*r*r;
return s;
}
};
class square:public shape
{
public:
square(double a=0,double b=0):shape(a),l(b) {}
double Area()
{

double s=l*r;
return s;
}
protected:
double l;
};
class triangle:public shape
{
public:
triangle(double c=0,double e=0,double d=0):shape(c)
{
r1=e;
angle=PI*d/180.0;
}
double Area()
{
double s=0.5*r*r1*sin(angle);
return s;
}
protected:
double r1;
double angle;
};
double fun(shape *p)
{
return p->Area();
}

int main()
{
square sq(1,1);
triangle tr(1,1,45);
circle ci(1);
shape *p;
double s=0;
p=&sq;
cout<<"Õý·½ÐÎÃæ»ýÊÇ£º"<<fun(p)<<endl;
s+=fun(p);
p=&tr;
cout<<"Èý½ÇÐÎÃæ»ýÊÇ£º"<<fun(p)<<endl;
s+=fun(p);
p=&ci;
cout<<"Ô²ÐεÄÃæ»ýÊÇ£º"<<fun(p)<<endl;
s+=fun(p);

cout<<"ÈýͼÐÎ×ÜÃæ»ýÊÇ£º"<<s<<endl;
return 0;
}

#2


 cout<<"Õý·½ÐÎÃæ»ýÊÇ£º"<<fun(p)<<endl;
    s+=fun(p);
后面     cout<<"Èý½ÇÐÎÃæ»ýÊÇ£º"<<fun(p)<<endl;
    s+=fun(p);
的s再相加就成了正方形和三角形面積的和,應該在s+=之前加上s=0;
后面的同樣????

#3


你可以雙擊報錯的語句  VS就會找到那句話 你就可以看看到底是什么樣的問題  要學會分析和解決問題

#4


1樓正解
由錯誤提示:
error C2248: 'square::square' : cannot access  private member declared in class 'square'
就可以看出你定義成private成員了,而private成員是無法在類外面使用的

#5


vc類中默認為私有...

#6


private成員是無法在類外面使用的,即使類的對象也不可以

#7


該回復於2010-04-28 09:43:21被版主刪除

#8


幫頂一個

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com