急!!!新手遇到编译错误。(解决立即结贴)
我笨死了。
找了一个多小时,硬是没找出错在哪儿。请大虾指正。
bcb6.0
代码如下:
#include <iostream>
#include <string>
using namespace std;
class Expr;
class Expr_node
{
friend ostream& operator << (ostream &, const Expr_node&);
friend class Expr;
int use;
//private:
protected:
Expr_node(): use( 1 ) {}
virtual void print(ostream &) const = 0;
virtual ~Expr_node() {}
};
ostream&
operator << (ostream &o, const Expr_node& e)
{
e.print( o );
return o;
}
class Int_node: public Expr_node
{
friend class Expr;
int n;
Int_node( int k ): n(k) {}
void print( ostream &o) const { o << n; }
};
class Unary_node: public Expr_node
{
friend class Expr;
string op;
Expr opnd;
Unary_node( const string &a, Expr b):
op( a ), opnd( b ) {}
void print( ostream &o) const
{ o << "(" << op << opnd << ")"; }
};
class Binary_node: public Expr_node
{
friend class Expr;
string op;
Expr left;
Expr right;
Binary_node( const string &a, Expr b, Expr c ):
op(a), left(b), right(c) {}
void print( ostream &o) const
{ o << "(" << left << op << right << ")"; }
};
class Expr
{
friend ostream &operator << ( ostream &, const Expr &);
Expr_node *p;
public:
Expr( int );
Expr( const string &, Expr );
Expr( const string &, Expr, Expr );
Expr( const Expr &t)
{ p = t.p; ++p->use; }
Expr & operator = ( const Expr &t );
~Expr() { delete p; }
};
Expr::Expr( int n )
{
p = new Int_node( n );
}
Expr::Expr( const string &op, Expr t)
{
p = new Unary_node( op, t );
}
Expr::Expr( const string &op, Expr left, Expr right )
{
p = new Binary_node( op, left, right );
}
Expr &
Expr::operator = ( const Expr &rhs )
{
rhs.p->use++;
if ( --p->use == 0 )
{
delete p;
}
p = rhs.p;
return *this;
}
ostream &
operator << ( ostream& o, const Expr &t )
{
t.p->print( o );
return o;
}
int main()
{
Expr t = Expr( "*", Expr( "-", 5), Expr( "+", 3, 4 ));
cout << t <<endl;
t = Expr("*", t, t );
cout << t <<endl;
}
错误提示如下:
Build
[C++ Error] a1.cpp(37): E2450 Undefined structure 'Expr'
[C++ Error] a1.cpp(37): E2449 Size of 'opnd' is unknown or zero
[C++ Error] a1.cpp(37): E2450 Undefined structure 'Expr'
[C++ Error] a1.cpp(49): E2450 Undefined structure 'Expr'
[C++ Error] a1.cpp(49): E2449 Size of 'left' is unknown or zero
[C++ Error] a1.cpp(49): E2450 Undefined structure 'Expr'
[C++ Error] a1.cpp(50): E2450 Undefined structure 'Expr'
[C++ Error] a1.cpp(50): E2449 Size of 'right' is unknown or zero
[C++ Error] a1.cpp(50): E2450 Undefined structure 'Expr'