[英]Unknown return type error (C++)
我的問題是我需要首先定義我的接口,然后在代碼中進一步實現它,但我的問題是,當我實現方法時,應該返回類內部已知的類型的函數似乎是未知的類。
這是我的代碼:
class Test {
class Inner {
};
public:
Inner* foo (void);
};
Inner* Test::foo(){
}
此代碼產生錯誤,因為類型Inner對於類外部的函數是未知的。 任何人都可以幫助我如何創建只返回類內部定義的類型的簡單函數?
感謝您的任何幫助。
你需要
Test::Inner* Test::foo(){
}
如果成員函數定義在類定義之外,那么返回類型不在類范圍內,與函數的其余部分不同,因此您需要顯式限定返回類型。
既然沒人提到它,你也可以在C ++ 11中做到這一點:
auto Test::foo() -> Inner * {...}
如果完全限定名稱很長,這可能很有用。 在C ++ 14中,您可以不使用尾隨類型部分,只需執行以下操作:
auto Test::foo() {...}
這將推斷出返回類型。
內蒙古是一個嵌套類和課外Test
它必須是完全合格的:
Test::Inner* Test::foo() {
//...
}
因為在全球范圍Inner
確實是未知的,只有Test::Inner
,所以Inner
內Test
是已知的。 你還可以在全局范圍內擁有另一個Inner
,與Test
相同,這將是其他Inner
,而不是Test::Inner
。
您似乎沒有指定范圍,因此它當然仍然未知。 C ++編譯器將在Test
類之外尋找一個Inner
類,它也可以作為一個不同的類出現,但它並不在你的特定情況下。
這就是為什么你還需要提供范圍,即使是返回類型。 這並不是說您需要在測試類中使用范圍,但在外部,您將不得不使用它。
因此,正確的代碼將是這樣的:
class Test {
class Inner {
};
public:
Inner* foo (void);
};
Test::Inner* Test::foo(){
//^^^^
}
嚴格地說,如果你有一個最近的編譯器,你甚至可以使用auto,但它會變得不那么全面。
class Test {
class Inner {
};
public:
Inner* foo (void);
};
Test::Inner* Test::foo(){
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.