C ++ метод не работает - PullRequest
0 голосов
/ 26 апреля 2018

Итак, я создал метод для запуска процесса добавления, умножения и т. Д. Полиномов, однако при попытке запустить start () компилятор запускается, однако поле остается пустым, хотя и не должно.Не совсем уверен, что я делаю не так.

Есть идеи?

Вот мой код.

Вот мой заголовок

#ifndef _POLY_GUARD 
#define _POLY_GUARD 

#include <iostream>
using namespace std;

class Polynomial
{
public:
    Polynomial(int coef, int exp);
    void start();   
    friend ostream & operator << (ostream &out, const vector<int> &c);
    friend istream & operator >> (istream &in, const Polynomial &c);  
    void addPolynomials();    
    void multiplyPolynomials();
    void evaluatePolynomial();
    int findCoefficient();
    int findLeadingExponent();    
};

#endif

Этоэто исходный код.

#include "Polynomial.h"
#include <utility>
#include <iostream>
#include <vector>
#include <string>
using namespace std;  

void Polynomial::start()
{
    int choice;

    std::cout << "What do you wish to do?" << std::endl;
    std::cout << "1. Add two polynomials" << std::endl;
    std::cout << "2. Multiply two polynomials" << std::endl;
    std::cout << "3. Evaluate one polynomial at a given value" << std::endl;
    std::cout << "4. Find Coefficent for a given polynomial and given exponent" << std::endl;
    std::cout << "5. Find the leading exponent for a given polynomial" << std::endl;
    std::cout << "6. Exit " << std::endl;

    std::cin >> choice;

    if (choice < 1 || choice > 6)
    {
        do
        {
            std::cout << "Invalid entry: please reenter choice" << std::endl;
            std::cin >> choice;   
        } while (choice < 1 || choice > 6);
    }

    if (choice == 1)
    {       
    }
 }

И, наконец, вот мой основной

#include "Polynomial.h"
#include <string>
#include <vector>
#include <utility>

int main()
{
    Polynomial start();
    system("pause");
}

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018

Прочитайте комментарии выше, поскольку они так же полезны, как и пример ниже.

Итак, у вас есть класс Polynomial, из которого вы можете создавать (создавать экземпляры) объекты этого конкретного типа.

class Polynomial {
public:
    /// default constructor
    Polynomial() = default;

    /// constructor with your coef and exp parameters
    /// when invoked it will use its arguments to initialize
    /// the data members coef and exp.
    Polynomial(int coef, int exp)
        : coef(coef)
        , exp(exp){};

    /// your member function start()
    void start();

private:
    /// your private data members that 
    /// are initialized upon construction
    /// when calling the appropriate constructor
    int coef;
    int exp;
};

В вашей основной функции, как уже упоминали другие, вы можете создать объект типа Polynomial, назвать его app или whatever:

int main()
{
    /// app is your object of type Polynomial
    /// its coef and exp are initialized
    /// using your arguments 4 and 5 respectively.
    Polynomial app(4, 5);
    /// now you can call you member function
    app.start();

    return 0;
}
0 голосов
/ 26 апреля 2018

Потому что

Polynomial start();

- самый неприятный анализ.

https://en.wikipedia.org/wiki/Most_vexing_parse

0 голосов
/ 26 апреля 2018

Согласно этой странице , можно объявить функцию в другой функции.

Итак, ваша main функция объявляет функцию с именем start, которая возвращает Polynomial объект и вызывает system("pause"), а затем возвращает.

попробуйте разделить объявление и вызвать метод start:

Polynomial p;
p.start();

или

Polynomial(1, 2).start(); // pass valid parameters
...