質問

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

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

そしてこれをやりたい:

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

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

  

MyMath.cpp:69:エラー: '。'の前にprimary-expressionが必要ですトークン

間違っているのは何ですか? MyMathをインスタンス化する がありますか?可能であれば、そうではありません。

役に立ちましたか?

解決

ではなく :: を使用します。

MyObject o = MyMath :: calcSomething();

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

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

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

他のヒント

  

何が間違っているのですか?

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

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

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

いいえ。

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

MyMath :: calcSomething()

を呼び出す

この方法で試してください

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

ありがとう

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top