2012-08-07 14 views
30

To może być zwykły błąd, którego nie widzę, ale Myślę, że po prostu robię coś nie tak. Nie martw się nie używam namespace std w moim nagłówku funkcje lub coś, co wydawało się, że problem tej osoby [Pytanie czytałem podobny do kopalni] [1] [1]: Why am I getting string does not name a type Error?string w przestrzeni nazw std nie nazywa typu

Dostaję 4 błędów Right Now:

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 ===|

Oto mój plik nagłówka:

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() 
}; 

i to jest mój plik 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

Dlaczego warto używać przełącznika, gdy macierz będzie działała pięknie? – TheZ

+2

@ TheZ: Dlaczego nie "# include" rzeczy, których chcesz użyć? Podejrzewam, że te pytania mają tę samą odpowiedź ... – Sharkos

+0

Przełącznik jest tym, do czego jestem przyzwyczajony. Osobiste preferencje. I dla mnie wygląda to ładniej. –

Odpowiedz

53

Trzeba

#include <string> 

<iostream> deklaruje cout, cin nie string.

+2

'' prawdopodobnie pośrednio deklaruje 'ciąg' (w większości wersji, tak czy inaczej), ale zauważ, że on to włącza * po *' Nouns.h' jest już przetwarzany. Chociaż nie byłoby to najlepsze rozwiązanie, prawdopodobnie odwróciłby również kolejność dwóch załączników. Oczywiście pojawiłoby się to ponownie wszędzie, gdzie "Nouns.h" został uwzględniony, więc lepiej umieścić w tym pliku "". –

+1

@ ErnestFriedman-Hill Nigdy nie widziałem wstrumienia zawierającego ciąg ... I w tym ciąg w rzeczownikach.h jest właściwym podejściem tutaj, a nie na zewnątrz. –

+0

Ups ... Przyznałem, że spędziłem conajmniej 30 minut, wpatrując się w kod, próbując dowiedzieć się, co jest nie tak. Proste rzeczy łatwo przeoczyć. Dziękuję ... –

6

Nouns.h nie obejmuje <string>, ale musi. Trzeba dodać

#include <string> 

w górnej części tego pliku, inaczej kompilator nie wie, co std::string jest, gdy spotyka się po raz pierwszy.

3

Trzeba dodać:

#include <string> 

W pliku nagłówka.

Powiązane problemy