2011-06-15 318 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一元二次方程::显示器(),而不是无效的显示()