2011-12-19 10 views
1

クラス構造内で可変スコープを理解することに若干の問題があります。コンストラクタで変数を作成する

クラスコンストラクタでいくつかの変数を作成し、そのクラス内の関数で使用できるようにしたいとします。私はと思ってコンストラクタでそれらを定義するだけで動作しますが、私のコンパイラ(g ++)は私にエラーを返します: 'foo'はこのスコープで宣言されていません。

誰かがこの些細な問題に少しでも光を当てることができますか?

ここに私がしようとしていることを説明するためのダミーコードがあります。

myClass.h 
using namespace std; 
class myClass{ 

public: 
    myClass(){ 
     std::vector<int> foo; 
     foo.resize(10,0); 
    }; 

    void myFunc(); 
} 

myClass.cpp 
void myClass::myFunc(){ 
    std::cout << foo[1] << end; 
    // etc... 
} 
+7

[良い本のC++](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)の時間! –

答えて

5

コンストラクタで宣言された変数は、コンストラクタ本体の末尾でスコープ外になります。これは他の機能と同じです。クラスのすべてのメンバー関数にアクセス可能な変数が必要な場合は、それらをメンバー変数にする必要があります。

これは、クラス本体で宣言することで行います。例えば。

class myClass { 
public: 
    myClass() { 
     foo.resize(10,0); 
    } 

    void myFunc(); // now has access to foo 

private: 
    std::vector<int> foo; 
}; 
+0

Ahhh。それは理にかなっている。ありがとう! – Noah

関連する問題