看看这个程序

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




...全文
73 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
nsly 2003-08-24
  • 打赏
  • 举报
回复
谢谢oopig(面向对象的猪)的回复,问题大多数都解决了。

能不能说说原因?
oopig 2003-08-23
  • 打赏
  • 举报
回复
我改了一下,已经编译通过了:
1。Arc.h文件中class Node;语句放在Arc的public:下面
2。Node.h文件中的class Arc;语句放在Node的public:下面
3。basicArc.h中的class Node;语句可以去掉
4。basicNode.h中的class Arc;语句可以去掉
yjh1982 2003-08-22
  • 打赏
  • 举报
回复
Arc要被main函数的参数使用吧?改名试试
nsly 2003-08-22
  • 打赏
  • 举报
回复
刚才注意到,大家说,如果CSDN的论坛可以将代码语法加亮多好。
nsly 2003-08-22
  • 打赏
  • 举报
回复
不会吧?这样就失去原有的继承了
nsly 2003-08-22
  • 打赏
  • 举报
回复
basicNode.h:25: ISO C++ forbids declaration of `Arc' with no type

我不理解这个错误是什么意思。

对了,忘了说了,过去的程序是在VC下开发的,这些代码是系统core部分。在Vc下没有任何问题,现在由于要考虑程序的可移植性,所以想用dev试试,没想到会有这个问题。

nsly 2003-08-22
  • 打赏
  • 举报
回复
是否需要加入编译参数

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧