看看这个程序
nsly 2003-08-22 05:52:39 我定义了4个类basicArc继承自Arc,basicNode继承自Node。下面是摘选的头文件
------------------------------ Arc.h ------------------------------
#ifndef ARC_H
#define ARC_H
class Node;
using namespace std;
class Arc {
public:
Arc() {};
~Arc() {};
virtual Node * getDestinationNode() = 0;
virtual void setDestinationNode(Node* destinationNode) = 0;
};
#endif //ARC_H
------------------------------ Node.h ------------------------------
#ifndef NODE_H
#define NODE_H
class Arc;
using namespace std;
class Node {
public:
Node(){};
~Node(){};
virtual bool addDepartureArc(Arc * arc) = 0;
virtual Arc * getDepartureArcAt() = 0;
};
#endif //NODE_H
------------------------------ basicArc.h ------------------------------
#ifndef BASICARC_H
#define BASICARC_H
#include "Arc.h"
class Node;
using namespace std;
class basicArc : public Arc {
private:
Node * destinationNode;
public:
basicArc();
~basicArc();
virtual Node * getDestinationNode();
virtual void setDestinationNode(Node* destinationNode);
};
#endif //BASICARC_H
------------------------------ basicNode.h ------------------------------
#ifndef BASICNODE_H
#define BASICNODE_H
#include <string>
#include "Node.h"
class Arc;
using namespace std;
class basicNode : public Node {
public:
Arc * departureArc;
public:
basicNode();
~basicNode();
virtual bool addDepartureArc(Arc * arc);
virtual Arc * getDepartureArcAt();
};
#endif //BASICNODE_H
实现部分代码略。
问题:我用dev c++编译的时候,有以下错误(最下面是错误信息),我以为是因为头文件引用的问题,所以将一些改成class方式。但是还是有问题。Node 和 Arc 均想定义成抽象类,而具体的实现将有basicNode和basicArc中实现。请各位指点迷津,难道是我对object oriented programming 的理解有问题?
Compiler: Default compiler
Building Makefile: "D:\csw_Src\test\testNestedClass\Makefile.win"
Executing make...
make.exe -f "D:\csw_Src\test\testNestedClass\Makefile.win" all
g++.exe -c basicNode.cpp -o basicNode.o -I"C:/Dev-Cpp/include/c++" -I"C:/Dev-Cpp/include/c++/mingw32" -I"C:/Dev-Cpp/include/c++/backward" -I"C:/Dev-Cpp/include"
In file included from basicNode.h:6,
from basicNode.cpp:1:
Node.h:14: `arc' was not declared in this scope
Node.h:14: virtual outside class declaration
Node.h:15: ISO C++ forbids declaration of `Arc' with no type
Node.h:15: `Arc' declared as a `virtual' field
Node.h:15: declaration of `int Node::Arc'
C:/Dev-Cpp/include/wingdi.h:2406: changes meaning of `Arc' from `BOOL
Arc(HDC__*, int, int, int, int, int, int, int, int)'
Node.h:15: parse error before `*' token
In file included from basicNode.cpp:1:
basicNode.h:15: syntax error before `*' token
basicNode.h:23: invalid use of member `Node::Arc'
basicNode.h:23: `arc' was not declared in this scope
basicNode.h:23: invalid data member initialization
basicNode.h:23: (use `=' to initialize static data members)
basicNode.h:23: `addDepartureArc' declared as a `virtual' field
basicNode.h:25: ISO C++ forbids declaration of `Arc' with no type
basicNode.h:25: `Arc' declared as a `virtual' field
basicNode.h:25: parse error before `*' token
basicNode.cpp: In constructor `basicNode::basicNode()':
basicNode.cpp:6: `class basicNode' has no member named `departureArcs'
basicNode.cpp: At global scope:
basicNode.cpp:14: invalid use of member `basicNode::Arc'
basicNode.cpp:14: `arc' was not declared in this scope
basicNode.cpp:14: `bool basicNode::addDepartureArc' is not a static member of `
class basicNode'
basicNode.cpp:14: syntax error before `{' token
basicNode.cpp:23: syntax error before `*' token
make.exe: *** [basicNode.o] Error 1
Execution terminated