2011-02-03 64 views
0

我有一個類,名爲A,它有它自己的頭文件。然後我有另一個叫做B的類,它也有自己的頭文件。他們每個人都有自己的.cpp文件,在那裏我實現了他們的所有功能。我總是收到一個錯誤,說我的班級沒有指定類型

我想有B類有一個私有變量類類型A的變量,但我不斷收到錯誤「A」沒有指定類型

我的代碼如下所示:

main.h:

#ifndef MAIN_H 
#define MAIN_H 

#include "A.h" 
#include "B.h" 

#endif 

main.cpp中:

#include "main.h" 

int main(int argc, char* args[]) { 
    B test; 
} 

啊:

#ifndef A_H 
#define A_H 

#include "main.h" 

class A { 
    public: 
    //public functions 
    private: 
    //private variables 
}; 
#endif 

了Bh:

#ifndef B_H 
#define B_H 

#include "main.h" 

class B { 
    public: 
    //public functions... 
    private: 
    A temp; 
} 
#endif 

因此,所有的我的包括在main.h,它包括一個前B. B具有類型A的變量,但它是從在主被包括在內。 h和Bh包含main.h。不過,我不斷收到一個錯誤說:

error: 'A' does not name a type. 

我做了一些谷歌上搜索,而且好像這意味着,當你使用它是沒有定義的,但應該有定義,因爲它是被列入在main.h中,對嗎?

+0

你爲什麼不在`main.cpp`中包含`B.h`,在`B.h`中包含`A.h`?只包括你需要的東西。我很好奇你的編譯器是否被include遞歸弄糊塗了。 `main.h` - >`A.h` - >`main.h`等 – 2011-02-03 21:04:17

+1

@Mark Loeser:防護常量(xx_H)可以避免遞歸問題,但是包含策略確實很奇怪。 – trojanfoe 2011-02-03 21:05:43

+0

@trojanfoe:是的......這是一個非常漫長的一天。我真的應該回家:) – 2011-02-03 21:06:15

回答

8

問題是A.h包括main.h,其中包括B.h,它試圖使用A

組織你的文件應該是這樣的好辦法:

main.h:

​​

main.cpp中:

#include "B.h" // for using class B 

int main(int argc, char* args[]) { 
    B test; 
} 

啊:

#ifndef A_H 
#define A_H 

// no includes needed ATM 

class A { 
    //... 
}; 
#endif 

Bh:

#ifndef B_H 
#define B_H 

#include "A.h" // for using class A 

class B { 
    //public functions... 
} 
#endif 

這樣,B.h自足,可以不必有任何事情之前它被使用。只要您的項目超過現在的玩具等級,這一點非常重要。爲什麼會有人試圖使用什麼標題x.h規定需要知道還包括f.h,m.hu.h

0

A.h在頂部包含Main.h。

Main.h跳過A.h,因爲A_H已被定義,則包含B.h.

B.h嘗試使用A,但是A.h尚未完成編譯,因此未定義類型。

2

如果您添加一個,您提供的代碼可以正確編譯;在B.h

年底做的更好的方式是#包括「A.H」在「B.h」,而不是的#include「main.h」

但它可能是無關你的問題。

如果您正在使用模板並忘記「typename」,那麼這種錯誤也可能會引起混淆。

相關問題