2017-02-23 10 views
-5

auto指定子に関して、C++ 14を使用していくつかの問題が発生しました。オートクラスメソッドでオート変数を初期化することはできますか?

私はその後のG ++でコンパイルそして、メインファイルに

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

    MiscFeature * misc = new MiscFeature(); 

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

のメソッドを呼び出す、私は次のエラー得、以下のようにヘッダファイルに

class MiscFeature 
{ 

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

private: 
    int data; 

}; 

のクラスを定義:

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; 

コンパイルして再度実行し、それが働きました。

関連する問題