Подтвердить что ты не робот

Справка по статическому методу С++

Можно ли вернуть объект из статического метода в С++, как в Java? Я делаю это:

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

И я хочу сделать это:

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

В классе MyMath существуют только статические методы, поэтому нет смысла создавать его. Но я получаю эту ошибку компиляции:

MyMath.cpp: 69: error: ожидаемое первичное выражение перед '.' Маркер

Что я делаю неправильно? Должен ли я создавать экземпляр MyMath? Я бы предпочел, если это возможно.

4b9b3361

Ответ 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   
}

Спасибо