32

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

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

そして私はこれをしたい:

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

MyMathクラスには静的メソッドしかないため、インスタンス化しても意味がありません。しかし、私はこのコンパイルエラーを受け取ります:

MyMath.cpp:69:エラー:「。」の前にプライマリ式が必要です。トークン

私は何が間違っているのですか?MyMathインスタンス化する必要がありますか?可能であれば、私はむしろしたくない。

4

5 に答える 5

82

::の代わりに使用.

MyObject o = MyMath::calcSomething();

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

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

MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
于 2009-07-30T19:40:30.267 に答える
12

私は何を間違っていますか?

あなたは単に間違った構文を使用しています...::演算子(スコープ解決演算子)は、異なる名前空間のクラスまたはメンバーにアクセスする方法です:

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

MyMath をインスタンス化する必要がありますか?

いいえ。

于 2009-07-30T19:40:29.847 に答える
1

この場合、MyMath::calcSomething() が必要です。「。」構文は、オブジェクト内の関数を呼び出すためのものです。:: 構文は、クラスまたは名前空間で関数を呼び出すためのものです。

于 2009-07-30T19:40:32.983 に答える
1

電話MyMath::calcSomething()

于 2009-07-30T19:40:33.263 に答える
1

Try this way

#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   
}

Thanks

于 2013-05-23T15:06:49.413 に答える