2009-07-30 23 views
29

¿Es posible devolver un objeto desde un método estático en C++ como en Java? Estoy haciendo esto:Ayuda con el método estático de C++

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

Y yo quiero hacer esto:

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

Hay métodos sólo estáticas en la clase MyMath, por lo que no hay punto de crear instancias de ella. Pero obtengo este error de compilación:

MyMath.cpp: 69: error: expresión primaria esperada antes de '.' token

¿Qué estoy haciendo mal? ¿Tengo tengo para instanciar MyMath? Preferiría no hacerlo, si es posible.

Respuesta

73

Utilice :: en lugar de .

MyObject o = MyMath::calcSomething();

Cuando llama 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 se debe utilizar habitual . o -> notación:

MyObject obj; 
MyObject* p = new MyObject(); 

MyObject::calcSomething(); 
obj.calcSomething(); 
p->calcSomething(); 
+8

1 para señalar que todavía se puede llamar a una función estática a través de objeto-> notación. –

12

What am I doing wrong?

Simplemente estás utilizando una sintaxis incorrecta ... la :: operador (scope resolution operator) es la forma en que accedería a clases o miembros en diferentes espacios de nombres:

int main() { 
    MyObject o = MyMath::calcSomething(); // correct syntax 
} 

Do I have to instantiate MyMath?

1

Para este caso, desea MyMath :: calcSomething(). Los '.' la sintaxis es para llamar funciones en objetos. La sintaxis :: es para llamar funciones en una clase o espacio de nombres.

1

llamada MyMath::calcSomething()

1

probar este modo

#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

Cuestiones relacionadas