2014-11-09 2 views
1

Я пытаюсь создать класс для обработки несколько функций, которые будут анализировать ввод, и поэтому я должен был создать экземпляр в main() так:Невозможно использовать экземпляр класса в C++

#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()'|

+1

Более сложная проблема заключается в том, что вы вызываете конструктор с 4 аргументами, но он принимает только 3 ... –

+0

Не следует ли это называть 'if (! T.exists (a, b, c))'? –

+0

'triangle.cpp | 37 | ошибка: никакая соответствующая функция для вызова в 'Triangle :: exists (double &, double &, double &)' |' – dwvaxaz

ответ

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; 
} 

, потому что кажется, б, являются членами данных экземпляра класса.

Также вы объявили конструктор как имеющий три параметра

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

Однако вы называете это с четырьмя аргументами

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

Я думаю, что стоимость часов должна рассчитываться на основе значений а, Ь , и c вместо ввода.

+0

Как мне найти высоту с помощью a, b и c? – dwvaxaz

+0

@ dwvaxaz Если я не ошибаюсь, тогда площадь может быть рассчитана на всех трех сторонах треугольника. Так на самом деле вам не нужно h. Посмотрите ссылку на геометрию, как вычислить область треугольника на основе всех трех ее сторон. –

+0

Правильно, но проблема сохраняется, с другой стороны. Я все еще не могу заставить его работать даже с параметрами. – dwvaxaz

2

Вы вызываете его без параметра.

if(!t.exists()) 

Однако у вас есть заявление, как: -

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

На подобных линиях вашего вызова конструктора не совпадающие с его декларацией ...

+0

Теперь я получаю 'triangle.cpp | 37 | error: ожидаемое первичное выражение перед ' double '| ' – dwvaxaz

Смежные вопросы