Справка по статическому методу С++
Можно ли вернуть объект из статического метода в С++, как в Java? Я делаю это:
class MyMath {
public:
static MyObject calcSomething(void);
private:
};
И я хочу сделать это:
int main() {
MyObject o = MyMath.calcSomething(); // error happens here
}
В классе MyMath существуют только статические методы, поэтому нет смысла создавать его. Но я получаю эту ошибку компиляции:
MyMath.cpp: 69: error: ожидаемое первичное выражение перед '.' Маркер
Что я делаю неправильно? Должен ли я создавать экземпляр MyMath? Я бы предпочел, если это возможно.
Ответы
Ответ 1
Используйте ::
вместо .
MyObject o = MyMath::calcSomething();
Когда вы вызываете метод без объекта класса, вы должны использовать нотацию ::
. Вы также можете вызвать статический метод через объекты класса или указатели на них, в этом случае вы должны использовать обычную нотацию .
или ->
:
MyObject obj;
MyObject* p = new MyObject();
MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
Ответ 2
Что я делаю неправильно?
Вы просто используете неправильный синтаксис... оператор ::
(оператор разрешения области видимости) заключается в том, как вы будете обращаться к классам или членам в разных пространствах имен:
int main() {
MyObject o = MyMath::calcSomething(); // correct syntax
}
Нужно ли создавать экземпляр MyMath?
Нет.
Ответ 3
В этом случае вы хотите MyMath:: calcSomething(). "." Синтаксис предназначен для вызова функций в объектах. Синтаксис:: для вызовов функций в классе или пространстве имен.
Ответ 4
Вызов MyMath::calcSomething()
Ответ 5
Попробуйте этот путь
#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
}
Спасибо