我正在使用code :: blocks,我認爲gcc。給出的示例代碼(這是僞代碼,並可能無法複製的問題):C++繼承問題
//Assume this is in a separate header file to B
class TestA
{
protected:
int A;
public:
void Function1(){A = 0;}
};
class TestB : public TestA
{
public:
void CallFunction(){ A = 10; Function1();}//
};
我會得到類似的編譯錯誤,如: 錯誤:「A」不在此範圍內聲明。 錯誤:Function1()未在此範圍內聲明。
我的印象是所有的基本變量和函數都繼承了子類。鑑於基類有很多函數和變量,我不想使用'using'關鍵字,因爲我必須爲每個函數和變量聲明它(據我所知)。
有什麼辦法讓TestB明確或實際包含它繼承的東西嗎?
有關片段如下
好。這是不可能的,包括示例代碼,因爲它是在項目,但我將引用關鍵片段:
C:\Users\user\Desktop\Projects\RND2\TemplateListAdv.h|30|error: 'Size' was not declared in this scope|
線,這是對是:
if(!Array.SetToSize(Size))
類它在爲:
template<typename TemplateItem>
class TemplateListAdv : public TemplateList<TemplateItem>
而且從TemplateList牽連行是:
SIZE_TYPE Size; //SIZE_TYPE is unsigned long.
//SIZE_TYPE is available in all files as unsigned long.
文件去: TemplateList.h-> TemplateBasics.h-> TemplateListAdv.h
從我所能看到的沒有丟失的文件。
我會解決它,'使用'關鍵字可以單獨解決它,但這一直在擾亂我,因爲我認爲繼承是自動的。
編譯器數據的要求:
「釋10.05轉6283(2010-05-27 9時09分13秒),GCC 4.4.1的Windows/Unicode的 - 32位」
這應該像預期的那樣工作,所以你必須找到一個例子,它會失敗... – carlpett
嘗試張貼真實的代碼和他們所在的文件。據我可以告訴它只是看起來像你不'在testb.cpp中包含#include「testa.h」 – sashang
發佈出現錯誤的代碼,此代碼沒有錯誤。 –