簡體   English   中英

未知的返回類型錯誤(C ++)

[英]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 ,所以InnerTest是已知的。 你還可以在全局范圍內擁有另一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM