Ошибки компиляции при написании программы квадратичной формулы - PullRequest
1 голос
/ 08 февраля 2012

Невозможно заставить этот код компилироваться и работать правильно

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

#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 Ответ

1 голос
/ 08 февраля 2012

Один из определенных вами конструкторов:

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

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

Что касается других ваших ошибок, посмотрите на этот код:

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...