【问题标题】:Compilation errors when writing a quadratic formula program编写二次公式程序时的编译错误
【发布时间】:2012-02-08 03:10:51
【问题描述】:

无法让这段代码编译并正常工作

实现文件:

#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:错误:“QuadEquation::QuadEquation()”的原型与“QuadEquation”类中的任何内容都不匹配 quadEquation.h:5:错误:候选者是:`QuadEquation::QuadEquation(const QuadEquation&)` quadEquation.h:10:错误:`QuadEquation::QuadEquation(int, int, int)` quadEquation.cpp:在成员函数`int QuadEquation::getRoot1()`中: quadEquation.cpp:35:错误:`discrim` 未在此范围内声明 quadEquation.cpp:35:错误:`getDiscrimant` 未在此范围内声明 quadEquation.cpp:在成员函数`int QuadEquation::getRoot2()`中: quadEquation.cpp:40:错误:`discrim` 未在此范围内声明

【问题讨论】:

  • 仅供参考,这里是您班级的惯用(即“专家风格”)版本:ideone.com/qEigx

标签: c++ math


【解决方案1】:

您定义的构造函数之一是

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

但是这个构造函数没有在你的头文件中定义。此外,这似乎是您的错误,因为这个构造函数没有多大意义——它只是声明了三个局部变量并且没有使用它们中的任何一个。如果您确实要声明此构造函数,请将其添加到您的头文件中,但从您的代码来看,我认为没有必要。

至于您的其他错误,请查看以下代码:

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

我突然想到了两件事。首先,discrim 在哪里声明?其次,如果二次公式可以具有任意复值根,那么您返回int 是否有原因?您可以在这里使用其他类型吗?

总的来说,您应该学会阅读这些编译器错误消息。我所指出的一切都可以很容易地从错误输出中收集到。现在您已经了解了问题所在,您能看到它们是如何产生给定的编译器错误的吗?

希望这会有所帮助!

【讨论】:

  • 此外,二次方程可以有任意复解。
  • 没有理由返回 int 除了这只是练习编码。
  • 现在它的说法 getDiscriminant 没有在 QuadEquation::getRoot1() 的这个范围内声明???
  • @Sean- 我会让你自己解决这个问题。您应该学习如何阅读编译器错误消息。这是一项绝对必要的技能,而且这是一个非常普通的错误消息。
  • @Sean:不,它没有说getDiscriminant 没有被声明。它说getDiscrimant 没有被声明。不要重复输入错误信息,使用复制+粘贴。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多