2016-07-06 12 views
1

私は他の質問と回答の多くを見て、誰も私は同じ質問を持っていないようにみえます。同じクラスのメンバへの参照を宣言するにはどうすればよいですか?

私はクラス内の両方、変数への参照を作成しようとしています。私は書いている大きなプログラムの一部を取り出して、小さなファイル:test.cppで隔離しました。私は多分、私の問題は、変数をリファレンスとどのように使っていたかとは関係がありましたが、同じメッセージが大きなプログラムのように現れたと思いました。ここで

が私のコードです:

#include <iostream> 

class Test { 
public: 
    int test; 
    int& rtest = test; 
}; 

int main() { 
    std::cout << "Enter an integer: "; 
    std::cin >> Test.rtest; 
    std::cout << "\n" << Test.rtest << "\n"; 
    return 0; 
} 

私はこれらのメッセージを受け取った:

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 
    int& rtest = test; 

In function ‘int main()’: error: expected primary-expression before ‘.’ token 
    std::cin >> Test.rtest; 

error: expected primary-expression before ‘.’ token std::cout << "\n" << Test.rtest << "\n"; 

は、なぜ私はこれらを取得していますか?私は何をしようとしていますか?もしそうなら、どうしたらいいですか?

答えて

4

warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 int& rtest = test;

は、あなたがそれ以外の場合は、お使いのコンパイラにフラグ-std=c++11を渡す必要がありますデフォルトでは古いバージョンのC++になります。このようにしてクラスメンバーを初期化することはできません。

In function ‘int main()’: error: expected primary-expression before ‘.’ token std::cin >> Test.rtest; error: expected primary-expression before ‘.’ token std::cout << "\n" << Test.rtest << "\n";

.オペレータがあなたのクラスのインスタンス、ないクラス自体を(つまり、::がためになるものだ)望んでいるからです。例えば、宣言するTest test;と代わりにtest.rtestを使用してください。

+0

、G ++作業を行ったためにフラグを渡します。 –

3

あなたはクラスの非静的メンバにアクセスするためのTestのインスタンスを持っている必要があります:あなたはとして有効-std=c++11コンパイラフラグを持っていない限り

int main() { 
    Test t; // <<<<<<<< 
    std::cout << "Enter an integer: "; 
    std::cin >> t.rtest; 
    std::cout << "\n" << t.rtest << "\n"; 
} 

はまた、あなたは、適切なコンストラクタで参照を初期化する必要がありますエラーメッセージは言う:

class Test { 
public: 
    int test; 
    int& rtest; // Nope! = test; 

    Test() : test(), rtest(test) {} // <<<<<<<<<<<<<<<<<< 
}; 
+0

ニースの答え。それはそれを行う方法を見つけ出すために私の研究の数分を要したものの、コンパイラフラグを共有するためのおかげで – Drew

関連する問題