2009-03-25 8 views
6
#include <iostream> 

using namespace std; 

class MyClass 
{ 
public: 
     void printInformation(); 
}; 

void MyClass::printInformation() 
{ 
    return; 
} 

int main() 
{ 

    MyClass::printInformation(); 

    fgetc(stdin); 
    return(0); 
} 

¿Cómo llamaría a la función printInformation dentro de main? El error me dice que necesito usar un objeto de clase para hacerlo.Funciones de llamada de miembro dentro de C++ principal

Respuesta

20

Declarar una instancia de MyClass, y luego llamar a la función de miembro del mencionado ejemplo:

MyClass m; 

m.printInformation(); 
16

Si desea hacer su trabajo de código que el anterior, el printInformation función() debe ser declarado e implementado como una función estática.

Si, por otro lado, se supone que debe imprimir información sobre un objeto específico, primero debe crear el objeto.

3

Necesita crear un objeto ya que printInformation() es no estático. Proveedores:

int main() { 

MyClass o; 
o.printInformation(); 

fgetc(stdin); 
return(0); 

} 
2

declarar que "estática" de esta manera:

static void MyClass::printInformation() { return; } 
11

Desde su pregunta no está claro si usted quiere ser capaz de utilizar la clase sin identidad o si una llamada al método requiere que se crea una instancia de la clase. Esto depende de si desea que el miembro printInformation escriba alguna información general o más específica sobre la identidad del objeto.

Caso 1: Desea utilizar la clase sin crear una instancia. Los miembros de esa clase deben ser static, usando esta palabra clave le dice al compilador que desea poder llamar al método sin tener que crear una nueva instancia de la clase.

class MyClass 
{ 
public: 
    static void printInformation(); 
}; 

Caso 2: Usted quiere que la clase tener una instancia, primero tiene que crear un objeto para que la clase tiene una identidad, una vez hecho esto se puede utilizar el objeto de su métodos.

Myclass m; 
m.printInformation(); 

// Or, in the case that you want to use pointers: 
Myclass * m = new Myclass(); 
m->printInformation(); 

Si usted no sabe cuándo usar punteros, leer el resumen del Pukku en este Stack Overflow question.
Tenga en cuenta que en el caso actual no necesitaría un puntero. :-)

0

usted tiene que crear una instancia de la clase para llamar al método ..

0

En una nota informal, también se puede llamar no estático funciones miembro de los temporales:

MyClass().printInformation(); 

(en otra nota informal, el final de la vida útil de la variable temporal (variable es importante, porque también puede llamar a funciones miembro no constantes) viene al final de la expresión completa (";"))

Cuestiones relacionadas