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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top