Cómo llamar al método estático de C ++
-
05-07-2019 - |
Pregunta
¿Es posible devolver un objeto desde un método estático en C ++ como lo hay en Java? Estoy haciendo esto:
class MyMath {
public:
static MyObject calcSomething(void);
private:
};
Y quiero hacer esto:
int main() {
MyObject o = MyMath.calcSomething(); // error happens here
}
Solo hay métodos estáticos en la clase MyMath, por lo que no tiene sentido instanciarlo. Pero me sale este error de compilación:
MyMath.cpp: 69: error: expresión principal esperada antes de '.' token
¿Qué estoy haciendo mal? ¿Tengo tengo para crear una instancia de MyMath? Preferiría que no, si es posible.
Solución
Utilice ::
en lugar de .
MyObject o = MyMath :: calcSomething ();
Cuando llame al método sin el objeto de la clase, debe usar la notación ::
. También puede llamar al método estático a través de objetos de clase o punteros a ellos, en este caso debe usar la notación habitual .
o - >
:
MyObject obj;
MyObject* p = new MyObject();
MyObject::calcSomething();
obj.calcSomething();
p->calcSomething();
Otros consejos
¿Qué estoy haciendo mal?
Simplemente estás usando una sintaxis incorrecta ... el operador ::
( operador de resolución de alcance ) es cómo accedería a las clases o miembros en diferentes espacios de nombres:
int main() {
MyObject o = MyMath::calcSomething(); // correct syntax
}
¿Tengo que crear una instancia de MyMath?
No.
Para este caso, quieres MyMath :: calcSomething (). Los '.' La sintaxis es para llamar a funciones en objetos. La :: sintaxis es para llamar a funciones en una clase o un espacio de nombres.
Llame a MyMath::calcSomething()
Prueba de esta manera
#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
}
Gracias