2012-02-08 3 views
1

Не удается получить этот код, чтобы скомпилировать и работать правильноОшибки компиляции при написании квадратичной формулы программы

Файл реализации:

#include <cmath> 
#include "quadEquation.h" 
using namespace std; 

QuadEquation::QuadEquation() 
{ 
    int a,b,c; 
} 

QuadEquation::QuadEquation(int first, int second, int third) 
{ 
    a = first; 
    b = second; 
    c = third; 
} 

int QuadEquation::getA() 
{ 
    return a; 
} 
int QuadEquation::getB() 
{ 
    return b; 
} 
int QuadEquation::getC() 
{ 
    return c; 
} 
int QuadEquation::getDiscriminant() 
{ 
    return b * b - 4 * a * c; 
} 
int QuadEquation::getRoot1() 
{ 
    discrim = getDiscrimant(); 
    return -b + sqrt(discrim)/(2 * a); 
} 
int QuadEquation::getRoot2() 
{ 
    discrim = getDiscriminant(); 
    return -b - sqrt(discrim)/(2 * a); 
} 

Файл заголовка:

#ifndef QUADEQUATION_H 
#define QUADEQUATION_H 

class QuadEquation 
{ 
private: 
    int a, b, c; 

public: 
    QuadEquation(int, int, int); 
    int getA(); 
    int getB(); 
    int getC(); 
    int getDiscriminant(); 
    int getRoot1(); 
    int getRoot2(); 
}; 

#endif 

#include <iostream> 
#include "quadEquation.h" 
using namespace std; 

int main() 
{ 
    QuadEquation quad1(1,0,9); 
    cout << "The first root of the first quadratic equation is: " << quad1.getRoot1() << endl; 

    return 0; 
} 

Некоторых ошибки что я получаю

 
quadEquation.cpp:5: error: prototype for ‘QuadEquation::QuadEquation()’ does not match any in class `QuadEquation` 
quadEquation.h:5: error: candidates are: `QuadEquation::QuadEquation(const QuadEquation&)` 
quadEquation.h:10: error:    `QuadEquation::QuadEquation(int, int, int)` 
quadEquation.cpp: In member function `int QuadEquation::getRoot1()`: 
quadEquation.cpp:35: error: `discrim` was not declared in this scope 
quadEquation.cpp:35: error: `getDiscrimant` was not declared in this scope 
quadEquation.cpp: In member function `int QuadEquation::getRoot2()`: 
quadEquation.cpp:40: error: `discrim` was not declared in this scope 
+1

Только для справки, вот идиоматическая (то есть «экспертный стиль») версия вашего класса: http://ideone.com/qEigx –

ответ

1

Один из конструкторов, которые вы определили это

QuadEquation::QuadEquation() 
{ 
    int a,b,c; 
} 

Но этот конструктор не определен в файле заголовка. Более того, похоже, что это ошибка с вашей стороны, поскольку этот конструктор не имеет большого смысла - он просто объявляет три локальные переменные и не использует ни один из них. Если вы хотите объявить этот конструктор, добавьте его в свой файл заголовка, но, судя по вашему коду, я не считаю, что это необходимо.

Как на другие ошибки, посмотрите на этот код:

int QuadEquation::getRoot1() 
{ 
    discrim = getDiscrimant(); 
    return -b + sqrt(discrim)/(2 * a); 
} 

Две вещи выскочить на меня. Во-первых, где объявлено discrim? Во-вторых, если квадратичные формулы могут иметь произвольные комплекснозначные корни, есть ли причина, по которой вы возвращаете int? Есть ли другой тип, который вы могли бы использовать здесь?

В целом вы должны научиться читать эти сообщения об ошибках компилятора. Все, что я указал, можно было легко получить из вывода ошибки. Теперь, когда вы знаете, в чем проблема, можете ли вы понять, как они генерируют данные ошибки компилятора?

Надеюсь, это поможет!

+0

Кроме того, квадратичные уравнения могут иметь произвольные комплексные решения. –

+0

нет причин для возврата int, кроме этого, это просто практика кодирования. – Sean

+0

@ BenVoigt-Вау, да, это абсолютно правильно. :-) Исправлена. – templatetypedef

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