2011-10-28 12 views
5

Tengo una clase que manejará una matriz de objetos de otra clase que he creado anteriormente (que funciona bien). El problema aparece cuando intento crear un objeto de mi clase List.Explica el error: ISO C++ prohíbe la declaración de `Personlist 'sin tipo

Este es el encabezado de la clase lista:

#ifndef personlistH 
#define personlistH 
#include "Person.h" 
#include <iomanip> 
#include <iostream> 
#define SIZE 10 

namespace std { 

    class PersonList { 
private: 
    Person persons[SIZE]; 
    int arrnum; 
    string filename; 

public: 
    Personlist(); 
    }; 
} 
#endif 

Ésta es la función principal:

#include <iostream> 
#include "PersonList.h" 

using namespace std; 

int main() { 

PersonList personlist; 

return 0; 
} 

El error de mi compilador me da es la siguiente:

error: "27 \PersonList.h ISO C++ forbids declaration of `Personlist' with no type"

He buscado respuestas, pero como soy bastante nuevo en C++, me ha resultado un poco confuso y no he encontrado ningún accesorio todavía. Sería genial si pudieras explicarme este error.

Respuesta

7

Usted tiene el mal capitalización en su declaración de constructor. Tiene Personlist(); pero necesita PersonList();. Como lo que tienes no es igual al nombre de la clase, se considera una función en lugar de un constructor, y una función necesita un tipo de devolución.

+2

Y también debe dejar de poner sus propios tipos en el espacio de nombres estándar, lo cual está prohibido. – RobH

+0

Gracias notado :), pero el error sigue ahí – Ms01

+0

Corrección: existe otro error, lo siento. "22 PersonList.h' Persona 'no nombra un tipo "¿Supongo que podría tener que ver con la clase de persona original? – Ms01

4

No añada sus propios tipos al espacio de nombre estándar (std), en su lugar cree su propio espacio de nombre y defina su clase dentro de él.

//PersonList.h

namespace PersonNamespace 
{ 
    class PersonList 
    { 
     //members here 
    }; 
} 

//Main.cpp

using namespace PersonNamespace; 

El error real es que se hizo un error tipográfico en lugar de PersonlistPersonList

+0

Así que con eso quieres decir que debería hacer algo similar a esto: namespace x {class bla bla} .... luego usar namespace x; ? – Ms01

+0

@cubsink: Sí. Por favor, consulte la respuesta actualizada. –

+0

Buen consejo, pero eso no soluciona el error. –

2

El error se debe a que se equivocaron las mayúsculas cuando declaró el constructor; debe ser PersonList() no Personlist().

Además, nunca debe declarar sus propias clases en el espacio de nombres std; eso está reservado para la biblioteca estándar. Debes crear tu propio nombre de espacio de nombres y poner tus cosas en eso.

Cuestiones relacionadas