2011-06-15 79 views
1

我正在爲二次方程編寫一個類。我已經得到.h文件,並且必須根據它來編寫它。我遇到問題時,我試圖建立的「顯示」功能,在這裏我得到未聲明的標識符區域(如下圖所示):在使用C++編寫類時遇到問題;未聲明的標識符

「my_a」:未聲明的標識符

「my_b」:未聲明的標識符

「my_c」:未聲明的標識符

「顯示器」:函數式初始化似乎是一個函數定義

我希望在我的代碼一點方向。我在底部包含.h文件。

#include <iostream> // for cout, cin, istream, ostream 
#include <cmath> // for floor 
#include <string> // for class string 
#include "quad.h" 
using namespace std; 


quadraticEquation::quadraticEquation (double initA, 
double initB, double initC) 
{ 
my_a = initA; 
my_b = initB; 
my_c = initC; 
} 

double quadraticEquation:: root1() const 
{ 
double result = 0.0; 
result= ((-1* my_b)+(sqrt((my_b*my_b)- (4*my_a*my_c)))/(2*my_a)); 
return result; 
} 

double quadraticEquation:: root2() const 
{ 
double result = 0.0; 
result= ((-1*my_b)- (sqrt((my_b*my_b)- (4*my_a*my_c)))/(2*my_a)); 
return result; 
} 

bool hasRealRoots(double root1 , double root2) 
    // post: returns true if an only if b*b-4*a*c >= 0.0, otherwise return false 
{ 
    bool result; 
    { 
    if (root1 >= 0.0) { 
     if (root2 >= 0.0){ 
     result = true; 
     } 
    else 
    { 
     return false;} 
} 
    } 
} 

void display (my_a, my_b, my_c) 
// post: shows the quadratic equation like -1x^2 + 3x - 9.7 
    //  when my_a == -1, my_b = 3, and my_c == -9.7 
{ 
     if (my_a >= 0) 
      cout <<my_a<< "x^2"<<; 
     else 
      cout <<"-"<< abs(my_a)<<"x^2"<<; 
     if(my_b >= 0) 
      cout << " + " << my_b << "x"; 
     else 
      cout << " - " << abs(my_b) << "x"; 
     if (my_c >= 0) 
      cout <<" + "<<my_c<< endl; 
     else 
      cout << " - "<<my_c<< endl; 
     return display; 
} 

而且

#ifndef _QUAD_H 
#define _QUAD_H 
// file name: quad.h (the file on disk lists pre- and post-conditions) 

class quadraticEquation { 
public: 
//--constructor (no default constructor for quadraticEquation) 
    quadraticEquation(double initA, double initB, double initC); 
    // post: initialize coefficients of quadratic equation initA*x*x + initB + c 

//--accessors 
    double root1() const; 
    // pre: there is at least one real root: b*b-4*a*c >= 0.0 
    // post: returns one real root as (-b+sqrt(b*b-4*a*c))/(2*a) 

    double root2() const; 
    // pre: there is at least one real root: b*b-4*a*c >= 0.0 
    // post: returns one real root as (-b-sqrt(b*b-4*a*c))/(2*a) 

    bool hasRealRoots() const; 
    // post: returns true if an only if b*b-4*a*c >= 0.0, otherwise return false 

    void display() const; 
    // post: shows the quadratic equation like -1x^2 + 3x - 9.7 
    //  when my_a == -1, my_b = 3, and my_c == -9.7 

private: 
    double my_a, my_b, my_c; // the three coefficients of the quadratic equation 
}; 

#endif 
+1

更好是'一元二次方程::一元二次方程(雙INITA, 雙INITB,雙initC):my_a( initA),my_b(initB),my_c(initC){}'作爲構造函數。這是更習慣的C++。 – wheaties 2011-06-15 13:02:26

+0

我也更喜歡'返回[公式];'到整個使用的三行版本,但毫無疑問,教授指示他們故意使用這個習語。 – 2011-06-15 13:13:12

回答

3

頭文件顯示顯示器()不採取任何參數。通過使這些支架空的東西應該得到好多了

void display (my_a, my_b, my_c) 

開始:你編碼一個需要的參數,但是你有沒有包括它們的類型。

其次,顯示應該是該類的成員函數。這就是它如何訪問my_a,my_b和my_c。

void quadraticEquation::display() 

第三,hasRealRoots也應該是類的成員函數,不採取任何參數 - 和你的代碼不應該只是看這兩個數字是正數(沒有意義),但實際評估的B^2 4AC項,看看它是否是積極的(指方程的根將是真正的而不是複雜。)

+1

+1 - 通過「應該是類的成員函數」,她可能意味着,「你忘了把'quadraticEquation ::'放在它的前面。」如果沒有這個功能,它會被編譯爲一個簡單的獨立函數(它不能訪問私有成員'my_a','my_b'和'my_c')。 – 2011-06-15 13:08:05

+0

@ T.E.D。我假設自從有三個成員函數已經在@Janice熟悉語法的代碼中,但你可能是對的,最好清楚一點。 – 2011-06-15 13:11:23

+0

你這樣做是正確的。然而,我總是用一兩個方法來做這個確切的錯誤(我向你保證我知道正確的語法)。與C++不同的是,大多數語言都有某種方式說「在這個範圍內的所有聲明都屬於這個類」,所以這對於多語言來說是一個容易犯的錯誤。 – 2011-06-15 13:14:56

0
void quadraticEquation::display (double my_a, double my_b, double my_c) 
// post: shows the quadratic equation like -1x^2 + 3x - 9.7 
    //  when my_a == -1, my_b = 3, and my_c == -9.7 
{ 
     if (my_a >= 0) 
      cout <<my_a<< "x^2"<<; 
     else 
      cout <<"-"<< abs(my_a)<<"x^2"<<; 
     if(my_b >= 0) 
      cout << " + " << my_b << "x"; 
     else 
      cout << " - " << abs(my_b) << "x"; 
     if (my_c >= 0) 
      cout <<" + "<<my_c<< endl; 
     else 
      cout << " - "<<my_c<< endl; 
     return display; 
} 
+0

'返回顯示;''void display()'不會工作太:) :) – vines 2011-06-15 13:02:42

+0

顯示功能不應該根據頭文件 – 2011-06-15 13:05:36

+0

這是我的壞。在電話中應該避免這樣的問題。 – Pete 2011-06-15 13:15:30

1

使用您的顯示功能是錯誤的(在CPP文件)。只需使用它作爲 void display() ,因爲它不需要參數,它所需的所有參數都已經初始化。 錯過了一個點..

寫入它爲void一元二次方程::顯示器(),而不是無效的顯示()