2012-11-30 36 views
2

我想在頭裏面聲明一個類對象,但是我無法讓它工作。我目前有2個頭文件和2個cpp文件,它們定義了每個函數的功能。這些類被稱爲Heltal和Array,並且它們都在它們自己的頭文件(heltal.h和array.h)中。在類頭裏面聲明類對象C++

我想聲明Array類的私有部分內的Heltal類對象,但無論我做什麼,我都找不到一種方法來聲明它。我已經試過將heltal.h頭文件包含到array.h頭文件中,但是它開始抱怨被重新定義。

在array.cpp中聲明它但是工作得很好,但是我希望在頭文件中定義它。

這裏的文件是什麼樣子的時刻:

heltal.h

class Heltal { 
    public: 
     Heltal(); 
     Heltal(int tal); 
     ~Heltal(); 

     void set(int tal); 
     bool operator < (const Heltal &heltal) const 
     { 
      return (heltal < heltal.heltal); 
     } 
     bool operator > (const Heltal &heltal) const 
     { 
      return (heltal > heltal.heltal); 
     } 
    private: 
     int heltal; 
}; 

array.h

#include <vector> 
class Array { 
public: 
    Array(); 
    Array(int in); 
    ~Array(); 
    int Random(int min, int max); 
private: 
    Heltal h; 
    int size; 
}; 

兩個頭都包含在main.cpp中

+2

你需要使用包括守衛。 –

回答

3

當您在中包含Heltal.h時,您沿着正確的路徑開始了。

添加include guards到您的標題,這將幫助你避免重複的夾雜物:

#ifndef HELTAL_H 
#define HELTAL_H 

class Heltal { 
    ... 
}; 

#endif 

現在你可以放心地包括Heltal.hArray.h頂部,您的問題將得到解決。

+0

修復它。非常感謝! – Kraffs

0

您確實需要包括內部array.h heltal.h,但兩個文件都需要包括後衛:

#ifndef array_h_guard 
#define array_h_guard 

// contents of array.h go here 

#endif // array_h_guard 

,類似的還有heltal.h。這將防止多重包含。

請注意,您可以只包含array.h中的heltal.h,它也解決了即時問題,但是包含警衛更安全。

1

編譯c/cpp文件時,包含的文件將首先在c/cpp文件中展開。 和一些類應該是正確的順序。 例如 Heltal必須在Array之前,所以你的包含順序應該確保這一點。