2012-02-08 38 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