C ++ пытается получить пользовательские вводимые значения для вызовов функций через функцию getline - PullRequest
1 голос
/ 29 марта 2020

Я пытаюсь использовать класс для создания программы, которая с помощью пользовательского ввода может выполнять операции пифагорейского теорума, но я получаю эту ошибку:

Ошибка (активная) E0304 нет экземпляра перегруженной функции «getline» соответствует списку аргументов

Это мой код:

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

class PythagoreanTheorum
{

public:

    double a;
    double b;
    double c;

    void seta(double A)
    {
        a = A;
    }
    void setb(double B)
    {
        b = B;
    }

    void setc(double C)
    {
        c = C;
    }

    double calcAreea()
    {
        return a * pow(a, 2) + b * pow(b, 2) == c * pow(c, 2);
    }    

};


int main()
{
   //Define one right triangles

        PythagoreanTheorum righttriangle1;

    double a;
    double b;
    double c;
    cout << "Enter the value for a: " << endl;
    righttriangle1.a = getline(cin, a);

    cout << "Enter the value for b: " << endl;
    righttriangle1.b = getline(cin, b);


    cout << "Enter the value for c: " << endl;
    righttriangle1.c = getline(cin, c);





}

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Вот как я бы написал код, предполагая, что calcAreea () в вашем коде должен показать применяемую теорему Пифагора.

Мой код:

#include <iostream>
#include <cmath>
using namespace std;

class PythagoreanTheorum
{
    public:
        void seta(double A)
        {
            a = A;
        }
        void setb(double B)
        {
            b = B;
        }
       void setc(double C)
        {
            c = C;
        }
        double calcTheorem()
        {
            cout<<"Applying Pythagoreas Theorem:"<<pow(a,2)<<"+"<<pow(b,2)<<"="<<pow(c,2);
        }    
    private:
        double a;
        double b;
        double c;

};


int main()
{
    //Define one right triangles
    //Test -> a = 3, b = 4, c = 5

    PythagoreanTheorum righttriangle1;

    double a;
    double b;
    double c;
    cout << "Enter the value for a: " << endl;
    cin>>a;
    righttriangle1.seta(a);

    cout << "Enter the value for b: " << endl;
    cin>>b;
    righttriangle1.setb(b);

    cout << "Enter the value for c: " << endl;
    cin>>c;
    righttriangle1.setc(c);

    righttriangle1.calcTheorem();
}

Я удалил строку файл заголовка, так как он не использовался, я также использовал cin вместо getline, так как в этом случае это намного лучше, также я хотел не использовать использование пространства имен std; но так как он был в вашем коде, я сохранил его и также переименовал в calcAreea как calcTheorem, поскольку он не был вычисляющей областью

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я объявил переменные в классе приватно, а не publi c

0 голосов
/ 29 марта 2020

std::getline читает строки, а не удваивается. Поэтому вам нужно прочитать с std::string, а затем преобразовать его в doublestod).

Вместо этого вы можете использовать >> оператор для входов тоже:

cout << "Enter the value for a: " << endl;
std::cin >> righttriangle1.a;

cout << "Enter the value for b: " << endl;
std::cin >> righttriangle1.b;

cout << "Enter the value for c: " << endl;
std::cin >> righttriangle1.c;
...