无法在C ++中使用类实例

时间:2014-11-09 20:40:17

标签: c++

我试图创建一个类来处理一些将解析输入的函数,因此我必须在main()中创建一个实例,如下所示:

#include <iostream>
#include <string>

using namespace std;

class Triangle{

private:
    double a, b, c, h;

public:
    Triangle(double sideA, double sideB, double sideC): a(sideA), b(sideB), c(sideC){}

    double get_perimeter()
    {
        return a + b + c;
    }

    double get_area()
    {
        return (b*h)/2;
    }

    bool exists(double a, double b, double c)
    {
        return a + b > c && a + c > b && b + c > a;
    }
};

int main()
{
    double a, b, c, h;
    cin >> a >> b >> c >> h;

    Triangle t(a, b, c, h);

    if(!t.exists())
    {
        cout << "No such triangle!" << endl;
        return 1;
    }

    cout << t.get_perimeter() << endl;
    cout << t.get_area() << endl;

    return 0;
}

但是,我收到以下错误triangle.cpp|37|error: no matching function for call to 'Triangle::exists()'|

2 个答案:

答案 0 :(得分:2)

你在没有参数的情况下调用它。

if(!t.exists())

但是您声明为: -

bool exists(double a, double b, double c)

在类似的行上,构造函数调用与其声明不匹配...

答案 1 :(得分:0)

存在的成员函数被声明为具有三个参数

bool exists(double a, double b, double c)

但是你不用参数调用它

if(!t.exists())

因此编译器无法找到没有参数声明的函数。

您应该定义类似

的功能
bool exists() const
{
    return a + b > c && a + c > b && b + c > a;
}

因为看起来a,b和c是类实例的数据成员。

您还将构造函数声明为具有三个参数

Triangle(double sideA, double sideB, double sideC): /*...*/

但是你用四个参数调用它

Triangle t(a, b, c, h);

我认为h的值应该根据a,b和c的值来计算,而不是输入。