2012-02-08 58 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 – 2012-02-08 03:30:35

回答

1

一个你定义的构造函数是

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

但这种构造是不是在你的头文件中定义。此外,看起来这是你的错误,因为这个构造函数没有多大意义 - 它只声明了三个局部变量,并没有使用它们中的任何一个。如果你想声明这个构造函数,把它添加到你的头文件中,但是从你的代码判断我不相信这是必要的。

至于你的其他错误,看看这段代码:

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

两件事情我跳出。首先,discrim在哪里申报?其次,如果二次方程式可以具有任意复数根值,那么您是否有返回int的原因?有没有可以在这里使用的另一种类型?

总体而言,您应该学会阅读这些编译器错误消息。我指出的所有内容都可以从错误输出中轻松获得。现在您已经意识到问题所在,您能否看到它们是如何生成给定的编译器错误的?

希望这会有所帮助!

+0

此外,二次方程可以具有任意复杂的解决方案。 – 2012-02-08 03:18:18

+0

除了这个之外没有理由返回int,只是练习编码。 – Sean 2012-02-08 03:18:58

+0

@ BenVoigt-哇,是的,这是绝对正确的。 :-)修正。 – templatetypedef 2012-02-08 03:19:11