JavaのようにC++の静的メソッドからオブジェクトを返すことは可能ですか?私はこれをやっています:
class MyMath {
public:
static MyObject calcSomething(void);
private:
};
そして私はこれをしたい:
int main() {
MyObject o = MyMath.calcSomething(); // error happens here
}
MyMathクラスには静的メソッドしかないため、インスタンス化しても意味がありません。しかし、私はこのコンパイルエラーを受け取ります:
MyMath.cpp:69:エラー:「。」の前にプライマリ式が必要です。トークン
私は何が間違っているのですか? MyMathをインスタンス化するためにhaveを実行しますか?可能であれば、したくないです。
_::
_の代わりに_.
_を使用する
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をインスタンス化する必要がありますか?
番号。
この場合、My Math :: calc Something()が必要です。 '。'構文は、オブジェクト内の関数を呼び出すためのものです。 ::構文は、クラスまたは名前空間で関数を呼び出すためのものです。
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
}
ありがとう