2012-08-07 14 views
30

Esto puede ser un simple error que no estoy viendo, pero Creo que simplemente estoy haciendo algo mal. No se preocupen que no estoy usando namespace std en mi cabecera funciones o cualquier cosa que parecía ser la edición de esta persona [Pregunta leí similar a la mía ] [1] [1]: Why am I getting string does not name a type Error?cadena en espacio de nombres std no nombra un tipo

estoy recibiendo 4 errores en este momento:

C:\Documents and Settings\Me\My Documents\C++Projects\C++\RandomSentence\Nouns.h|8|error: 'string' in namespace 'std' does not name a type|

C:\Documents and Settings\Me\My Documents\C++Projects\C++\RandomSentence\Nouns.h|12|error: 'string' in namespace 'std' does not name a type|

C:\Documents and Settings\Me\My Documents\C++Projects\C++\RandomSentence\Nouns.h|13|error: 'string' in namespace 'std' does not name a type|

C:\Documents and Settings\Me\My Documents\C++Projects\C++\RandomSentence\Nouns.cpp|9|error: no 'std::string Nouns::nounGenerator()' member function declared in class 'Nouns'|

||=== Build finished: 4 errors, 0 warnings ===|

Aquí está mi archivo de cabecera:

class Nouns 
{ 
    public: 
     Nouns(); 
     std::string noun; 
    protected: 
    private: 
     int rnp; // random noun picker 
     std::string dog, cat, rat, coat, toilet, lizard, mime, clown, barbie, pig, lamp, chair, hanger, pancake, biscut, ferret, blanket, tree, door, radio; 
     std::string nounGenerator() 
}; 

y este es mi cpp:

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

Nouns::Nouns() 
{ 

} 

std::string Nouns::nounGenerator(){ 
    RollRandom rollRandObj; 

    rnp = rollRandObj.randNum; 

    switch(rnp){ 
    case 1: 
     noun = "dog"; 
     break; 
    case 2: 
     noun = "cat"; 
     break; 
    case 3: 
     noun = "rat"; 
     break; 
    case 4: 
     noun = "coat"; 
     break; 
    case 5: 
     noun = "toilet"; 
     break; 
    case 6: 
     noun = "lizard"; 
     break; 
    case 7: 
     noun = "mime"; 
     break; 
    case 8: 
     noun = "clown"; 
     break; 
    case 9: 
     noun = "barbie"; 
     break; 
    case 10: 
     noun = "pig"; 
     break; 
    case 11: 
     noun = "lamp"; 
     break; 
    case 12: 
     noun = "chair"; 
     break; 
    case 13: 
     noun = "hanger"; 
     break; 
    case 14: 
     noun = "pancake"; 
     break; 
    case 15: 
     noun = "biscut"; 
     break; 
    case 16: 
     noun = "ferret"; 
     break; 
    case 17: 
     noun = "blanket"; 
     break; 
    case 18: 
     noun = "tree"; 
     break; 
    case 19: 
     noun = "door"; 
     break; 
    case 20: 
     noun = "radio"; 
     break; 
    } 

    return noun; 
} 
+1

¿Por qué utilizar un conmutador cuando una matriz funcionaba perfectamente? – TheZ

+2

@TheZ: ¿Por qué no '# include' las cosas que quieres usar? Sospecho que estas preguntas tienen la misma respuesta ... – Sharkos

+0

es lo que estoy acostumbrado a usar. Preferencia personal. Y para mí se ve más ordenado. –

Respuesta

53

Necesitas

#include <string> 

<iostream> declara cout, cin, no string.

+2

'' probablemente declare indirectamente 'string' (en la mayoría de las versiones, de todos modos), pero tenga en cuenta que lo está incluyendo * después de *' Nouns.h' ya está procesado. Aunque esta no sería la mejor solución, invertir el orden de los dos incluye probablemente también solucionaría el problema. Por supuesto, esto volvería a aparecer en todos lados, se incluyó 'Nouns.h', por lo que es mejor incluir' 'en ese archivo. –

+1

@ ErnestFriedman-Hill Nunca he visto iostream, incluida la cuerda ... Y la inclusión de la cuerda en los sustantivos.h es el enfoque correcto aquí, no afuera. –

+0

¡Uy ...! Sabía que pasé al menos 30 minutos mirando el código tratando de descubrir qué pasaba. Las cosas simples se pasan por alto fácilmente. Gracias ... –

6

Nouns.h no incluye <string>, pero es necesario. Es necesario agregar

#include <string> 

en la cima de ese archivo, de lo contrario el compilador no sabe lo que es std::string cuando se encuentra por primera vez.

3

es necesario agregar:

#include <string> 

En el archivo de cabecera.

Cuestiones relacionadas