程序内容:
#include "stdafx.h"   
#include<iostream>
#include<cmath>
using namespace std;
class Triangle{
private:
    float A,B,C;
public:
   Triangle(float a,float b,float c)
   {
        A=a;B=b;C=c;
   }
   void perimeter(float a,float b,float c);
   void area(float a,float b,float c);
};
void Triangle::perimeter(float a,float b,float c)
{
    cout<<endl<<"Perimeter is:"<<A+B+C <<endl;
}
void Triangle::area(float a,float b,float c)
{
    cout<<endl<<"area is :"<<sqrt((A+B+C)*(A-B+C)*(-A+B+C)*(A+B-C))/4.0;
}
int _tmain(int argc, _TCHAR* argv[])
{    float a,b,c;
    cout<<"Please input lengths of side:"<<endl;
    cin>>a>>b>>c;
    Triangle t;
    t.area(a,b,c);
    t.perimeter(a,b,c);
    return 0;
}调试结果:
1>g:\c++\c++2010使用\三角形类\三角形类\三角形类.cpp(38): error C2512: “Triangle”: 没有合适的默认构造函数可用
1>
1>生成失败。
1>
1>已用时间 00:00:01.84
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

解决方案 »

  1.   

    Triangle t;
    改成
    Triangle t(a, b, c);
      

  2.   

    改成这样了:#include "stdafx.h"   
    #include<iostream>
    #include<cmath>
    using namespace std;class Triangle{
    private:
    float A,B,C;
    public:
    void perimeter(float a,float b,float c);
    void area(float a,float b,float c);
    };void Triangle::perimeter(float a,float b,float c)
    {

    cout<<endl<<"Perimeter is:"<<A+B+C <<endl;
    }void Triangle::area(float a,float b,float c)
    {

    cout<<endl<<"area is :"<<sqrt((A+B+C)*(A-B+C)*(-A+B+C)*(A+B-C))/4.0;
    }Triangle t;
    int _tmain(int argc, _TCHAR* argv[])
    { float a,b,c;
    cout<<"Please input lengths of side:"<<endl;
    cin>>a>>b>>c;

            t.area(a,b,c);
    t.perimeter(a,b,c);
    return 0;
    }
    后来总调试功了,但面积和周长显示为0是怎么回事
      

  3.   

    你认真了没?
    area和perimeter里根本没用到a、b、c
    一是将A、B、C分别换成a、b、c
    如果不想用构造函数传入a、b、c给A、B、C,可以增加一个方法
    setValue(float a,float b,float c)
    {
    A = a;
    B = b;
    C = c;
    }
    而此时area和perimeter的参数可以去掉还有一开始用了下面这构造函数
    Triangle(float a,float b,float c)
      {
      A=a;B=b;C=c;
      }
    则可以把Triangle t;放到_tmain函数里
    int _tmain(int argc, _TCHAR* argv[])
    {    float a,b,c;
        cout<<"Please input lengths of side:"<<endl;
        cin>>a>>b>>c;
        Triangle t(a,b,c);
        t.area(a,b,c); //设计得很乱,既然用A、B、C,为什么又要搞个参数
        t.perimeter(a,b,c); //乱
        return 0;
    }
      

  4.   

    你可以在类下定义一个构造函数 Triangle();
    应该也可以的,你定义的成员变量貌似没有意思。
      

  5.   

    吸收你们的办法后做出来了,谢谢
    正确的是:
    #include<iostream>
    #include<cmath>using namespace std;
    class Triangle{
    private:
    float A,B,C;
    public:
    Triangle(float a,float b,float c)
    {
    A=a;B=b;C=c;
    };

    void perimeter(float a,float b,float c);
    void area(float a,float b,float c);
    };void Triangle::perimeter(float a,float b,float c)
    {

    cout<<endl<<"Perimeter is:"<<a+b+c<<endl;
    }void Triangle::area(float a,float b,float c)
    {

    cout<<endl<<"area is :"<<sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))/4.0;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    float a,b,c;
    cout<<"Please input lengths of side:"<<endl;
    cin>>a>>b>>c;
    Triangle t(a,b,c);
        t.area(a,b,c);
    t.perimeter(a,b,c);
    getchar();
    return 0;
    }可是还有疑问:#include "stdafx.h"   
    #include<iostream>
    #include<cmath>
    using namespace std;
    class Triangle{
    private:
    float A,B,C;
    public:
    void perimeter(float a,float b,float c);
    void area(float a,float b,float c);
    };void Triangle::perimeter(float a,float b,float c)
    {

    cout<<endl<<"Perimeter is:"<<a+b+c<<endl;
    }void Triangle::area(float a,float b,float c)
    {

    cout<<endl<<"area is :"<<sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c))/4.0;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
            float a,b,c;
    cout<<"Please input lengths of side:"<<endl;
    cin>>a>>b>>c;
    Triangle t;
            t.area(a,b,c);
    t.perimeter(a,b,c);
    getchar();
    return 0;
    }
    把构造函数删了,而且在建立对象的时候没有写成Triangle t(a,b,c);
    为什么没用到A,B,C
      

  6.   


    因为你的两个函数直接带参进来了,所以类自身的A\B\C是成员都用不上了。