我正在使用列表列表编程图形。为此,我有两个类,这个类中的每一个都有一个指向同一个类的另一个对象的指针和一个指向第二个类的对象的指针。这是代码:
文件V.h:
#ifndef VERTICEPUNT_H
#define VERTICEPUNT_H
#include "A.cpp"
typedef char E;
class V
{
public:
E etiqueta;
V* siguiente;
A* primera; //<- Error: 'A' does not name a type
V();
~V();
};
#endif // VERTICEPUNT_H
文件V.cpp:
#include "V.h"
V::V()
{
etiqueta = ' ';
siguiente = 0;
primera = 0; //<- Error: 'primera' was not declared in this scope
}
V::~V()
{
delete primera;
delete siguiente;
}
文件A.h:
#ifndef ARISTAPUNT_H
#define ARISTAPUNT_H
#include "V.cpp"
typedef int P;
class A
{
public:
P peso;
V* vertice;
A* siguiente;
A();
~A();
};
#endif // ARISTAPUNT_H
A.cpp:
#include "A.h"
A::A() //<- Error: 'A' does not name a type
{
peso = 0;
siguiente = 0;
vertice = 0;
}
A::~A() // <- Error: 'A' does not name a type
{
delete siguiente;
}
我怎样才能解决这个问题?
答案 0 :(得分:5)
该消息表示类名不在范围内。 V.h
不应包含A.cpp
,应包括A.h
。 A.h
包含V.cpp
也是如此。
一般情况下,您永远不希望#include
CPP文件 - 来自标头或其他CPP文件。只有.h
头文件被设计为包含在预处理器中。
如果是这样的循环定义,你应该向前声明你要定义的指针,并放弃包含该类的标题:
#ifndef VERTICEPUNT_H
#define VERTICEPUNT_H
class A; // <<== Forward declare the class.
typedef char E;
class V
{
public:
E etiqueta;
V* siguiente;
A* primera;
V();
~V();
};
#endif // VERTICEPUNT_H