2009-07-30 19 views
29

JavaのようなC++の静的メソッドからオブジェクトを返すことはできますか?私はこれをやっている:C++の静的メソッドに関するヘルプ

class MyMath { 
    public: 
     static MyObject calcSomething(void); 
    private: 
}; 

そして、私はこれをしたい:MyMathクラスの静的メソッドのみがあり

int main() { 
    MyObject o = MyMath.calcSomething(); // error happens here 
} 

ので、それをインスタンス化するにはポイントがありません。しかし、私はこのコンパイル・エラーを受け取ります:

MyMath.cpp:69:エラー: '。トークン

私は間違っていますか? にはがあり、MyMathをインスタンス化できますか?私はそれが可能ならば、むしろそうしないでしょう。あなたは、単に間違った構文を使用している

答えて

73

.の代わりに::を使用してください。

MyObject o = MyMath::calcSomething();

クラスのオブジェクトを除いてメソッドを呼び出すときは、::という表記法を使用する必要があります。あなたは、この場合にも、あなたがいつも.または->表記を使用する必要があり、それらにクラスオブジェクトまたはポインタを経由して静的メソッドを呼び出すことができます:

MyObject obj; 
MyObject* p = new MyObject(); 

MyObject::calcSomething(); 
obj.calcSomething(); 
p->calcSomething(); 
+8

1を試してみてください。 –

12

What am I doing wrong?

... ::オペレータ(scope resolution operator)は、異なる名前空間のクラスやメンバにアクセスする方法を次のとおりです。

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax 
} 

Do I have to instantiate MyMath?

1

この場合、あなたは)(MyMath :: calcSomethingをしたいです。 '。'構文は、オブジェクト内の関数を呼び出すためのものです。 ::構文は、クラスまたは名前空間の関数を呼び出すためのものです。 MyMath::calcSomething()

1

コールは、あなたがまだオブジェクト - >記法を介した静的関数を呼び出すことができることに留意するために、このように

#include <iostream> 
using namespace std; 
class MyMath { 
public: 
    static MyMath* calcSomething(void); 
private: 
}; 
MyMath* MyMath::calcSomething() 
{ 
    MyMath *myMathObject=new MyMath; 
    return myMathObject; 
} 
int main() 
{ 
    MyMath *myMathObject=MyMath::calcSomething(); 
    /////Object created and returned from static function calcSomeThing 
} 

おかげ

1

関連する問題