2011-08-11 16 views
8

私はまだポインタとリファレンスをよく理解していませんが、静的メソッドと変数を持つクラスがメインクラスと他のクラスから参照されます。私は静的関数を持つこのクラスの変数に渡すmain()で定義された変数を持っています。私はそれらの関数がmain()スコープで見られる変数の値を変更したいと思っています。静的ポインタを持つC++クラス

これは私が何をしようとしていますが、私はコンパイルエラーを取得...

class foo 
{ 
    public: 

    static int *myPtr; 

    bool somfunction() { 
     *myPtr = 1; 
     return true; 
    } 
}; 

int main() 
{ 
    int flag = 0; 
    foo::myPtr = &flag; 

    return 0; 
} 
+11

通常、コンパイルエラーが発生するたびに、_always_は質問にそれらを含めます。 –

答えて

15

のようにクラスの外部静的変数の定義を提供するものの例である:

//foo.h 
class foo 
{ 
    public: 

    static int *myPtr; //its just a declaration, not a definition! 

    bool somfunction() { 
     *myPtr = 1; 
     //where is return statement? 
    } 
}; //<------------- you also forgot the semicolon 


///////////////////////////////////////////////////////////////// 
//foo.cpp 
#include "foo.h" //must include this! 

int *foo::myPtr; //its a definition 

その上、上記のコメントに示されているセミコロンも忘れてしまいました。somefunctionboolの値を返す必要があります。

+0

'foo :: somfunction'も値を返す必要があります – Praetorian

+0

次のエラーが表示されます:修飾名 'foo :: myPtr'の無効な使用 – Brian

+0

@Brian:私が言ったようにします。あなたはそれから何の誤りもありません。 – Nawaz

0
#include <iostream> 
using namespace std; 

class foo 
{ 
public: 

static int *myPtr; 

bool somfunction() { 
    *myPtr = 1; 
    return true; 
} 
}; 
////////////////////////////////////////////////// 
int* foo::myPtr=new int(5);  //You forgot to initialize a static data member 
////////////////////////////////////////////////// 
int main() 
{ 
int flag = 0; 
foo::myPtr = &flag; 
return 0; 
} 
+0

このコードは質問に答えるかもしれませんが、どのようにして問題が解決されたのか、なぜそれが解決されるのかについての追加の文脈を提供すると、回答の長期的価値が向上します。質の高い回答を提供するためには、この[how-to-answer](http://stackoverflow.com/help/how-to-answer)をお読みください。 – thewaywewere

関連する問題