2013-06-27 63 views
3

我正在使用列表列表編程圖。爲此,我有兩個類,每個類都有一個指向同一類的另一個對象的指針和一個指向第二個類的對象的指針。下面是代碼:'[Class name]'沒有在C++中命名類型

文件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; 
} 

我怎麼能解決呢?

回答

4

該消息表示類名不在範圍內。 V.h不應該包括A.cpp,它應該包括A.hA.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 
+0

我試過了,它修復了錯誤。但是,我收到了一些警告,例如調用〜V時可能出現的問題,以及該類的無效使用。 –

+1

@ J-orgeMataVillalobos您在這兩個文件中都有相同的問題,所以您需要在兩個地方實施類似的更改。 – dasblinkenlight