2014-09-18 104 views
0

剛得到一個奇怪的錯誤,我不完全確定爲什麼。類指針作爲另一個對象的數據成員

我有4個文件(兩個頭文件和兩個實現)。問題出在標題內:

主文件只包含Station.h,這就是Stations.h包含在其中的原因。

Station.h

#ifndef STATION_H 
#define STATION_H 
#include "Stations.h" 

#include <string> 

enum PassType{student, adult}; 

class Station{ 

     std::string station_name; 
     unsigned int student_passes; 
     unsigned int adult_passes; 

    public: 
     Station(); 
     void set(const std::string&, unsigned, unsigned); 
     void update(PassType, int); 
     unsigned inStock(PassType) const; 
     const std::string& getName() const; 

}; 


#endif 

Stations.h

#ifndef STATIONS_H 
#define STATIONS_H 
#include "Station.h" 

namespace w2{ 

    class Stations{ 

    Station *station; 

    public: 
     Stations(char *); 
     void update() const; 
     void restock() const; 
     void report() const; 
     ~Stations(); 

    }; 

} 

#endif 

它不知道站是什麼。我收到以下錯誤:

./Stations.h:9:2: error: unknown type name 'Station'; did you mean 'Stations'? 
     Station *station; 

我在這裏錯過了什麼?我不是最強大的C++開發人員,所以請裸照。

+0

是否有一個以上的文件名爲Station.h,並且出錯了?涉及的任何命名空間? – dlf 2014-09-18 21:06:12

+0

是否有任何'#ifdef'行來防止多重包含?請包括文件的全部內容。 – 2014-09-18 21:06:20

+0

@ R Sahu - 兩個標題都有。 – Kris 2014-09-18 21:07:29

回答

0

取出的#include 「Stations.h」 你是#include在Station.h荷蘭國際集團Stations.h。因此,編譯器在class Station之前看到class Stations。在這種情況下,它不會出現Station要求Stations,所以您可以簡單地刪除包含。

如果Station沒有需要了解Stations,那麼你就必須在頭一個或另一個使用前聲明(並注意不要使用前置聲明類在需要的方式完整的定義)。

+0

明白了!無視我最後的評論。巨大的錯字!非常感謝! – Kris 2014-09-18 21:17:28

0

不要忘了把一個分號聲明站課後:

class Stations { 
    Station *station; 
}; 
0

ü需要做向前聲明。 從Station.h

#ifndef STATIONS_H 
#define STATIONS_H 
#include "Station.h" 

namespace w2{ 
    class Station; 
    class Stations{ 

    Station *station; 

    public: 
     Stations(char *); 
     void update() const; 
     void restock() const; 
     void report() const; 
     ~Stations(); 

    }; 

} 

#endif 
相關問題