2017-02-23 63 views
-5

我遇到了一些關於使用C++ 14的auto說明符的問題。是否可以使用自動類方法初始化自動變量?

我定義在如下頭文件中的類,

class MiscFeature 
{ 

public: 
    MiscFeature(); 
    auto getData(); 
    auto setData(int); 

private: 
    int data; 

}; 

然後主叫在主文件中的方法,

int 
main(int argc, char** argv) 
{ 

    MiscFeature * misc = new MiscFeature(); 

    auto val = misc->getData(); 
    cout<<val<<endl; 
    val = misc->setData(6); 
    cout<<val<<endl; 
} 

然後用克編譯++,我得到了以下的錯誤:

test.cpp:21:30: error: use of auto MiscFeature::getData() before deduction of auto

auto val = misc->getData(); 

如果我在主文件中定義了類似的功能,沒關係。

我該如何解決這個問題?或者這是一個限制?

+1

向我們展示代碼! – DeiDei

+0

可能的重複:http://stackoverflow.com/q/42329757 –

+1

創建一個[mcve] – user2079303

回答

0

我想我找到了我的問題的答案。
由於類成員是用自動說明符聲明的,所以在調用該方法時,該函數應該被定義和已知。
但是,在我上面的代碼示例中,主文件只引用了頭文件,所以函數仍然是未知的。所以編譯器抱怨說。
然後我在頭文件中聲明另一個內聯函數並再次測試。 代碼如下,

class MiscFeature 
{ 
public: 
    MiscFeature(); 
    int getData(); 
    bool setData(int); 
    auto testauto() { return 7;} 
private: 
    int data; 
}; 

然後調用方法testauto()中,如下所示的主文件,

auto * misc = new MiscFeature(); 
auto val = misc->getData(); 
cout<<val<<endl; 
auto ret = misc->setData(6); 
cout<<ret<<endl; 
auto val1 = misc->testauto(); 
cout<<val1<<endl; 

然後再次編譯和運行它,它的工作。