This may just be a simple mistake that I'm not seeing, but I think I'm simply doing something wrong. Don't worry I'm not using namespace std in my header functions or anything which seemed to be this person's issue [Question I read similar to mine][1] [1]: Why am I getting string does not name a type Error?
I am getting 4 errors 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 ===|
Here is my header file:
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()
};
And this is my cpp file:
#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;
}
5 Answers 5
You need to
#include <string>
<iostream>
declares cout
, cin
, not string
.
-
2
<iostream>
probably indirectly declaresstring
(in most versions, anyway) but note that he's including it afterNouns.h
is already processed. Although this wouldn't be the best solution, reversing the order of the two includes would probably fix the problem as well. Of course, this would come up again everywhere elseNouns.h
was included, so it's better to include<string>
in that file.Ernest Friedman-Hill– Ernest Friedman-Hill2012年08月07日 20:48:41 +00:00Commented Aug 7, 2012 at 20:48 -
1@ErnestFriedman-Hill I've never seen iostream including string... And including string in nouns.h is the correct approach here, not outside.Luchian Grigore– Luchian Grigore2012年08月07日 20:49:25 +00:00Commented Aug 7, 2012 at 20:49
-
Oops... I sware I spent atleast 30 minutes staring at the code trying to figure out what was wrong. Simple things are easily overlooked. Thank you...user1581100– user15811002012年08月07日 20:51:00 +00:00Commented Aug 7, 2012 at 20:51
-
@LuchianGrigore: If I recall, MSVC's
iostream
includes enough of string for it to work in some but not all contexts, leading to much confusion.Mooing Duck– Mooing Duck2012年08月07日 20:54:03 +00:00Commented Aug 7, 2012 at 20:54 -
@LuchianGrigore -- note that I didn't say includes, but declares. For example, on my system (gcc 4.0), iostream includes ostream which includes ios which includes iosfwd which includes bits/stringfwd.h which forward-declares std::string.Ernest Friedman-Hill– Ernest Friedman-Hill2012年08月07日 20:57:35 +00:00Commented Aug 7, 2012 at 20:57
Nouns.h
doesn't include <string>
, but it needs to. You need to add
#include <string>
at the top of that file, otherwise the compiler doesn't know what std::string
is when it is encountered for the first time.
You need to add:
#include <string>
In your header file.
Notice
#include <string.h>
is not
#include <string>
The difference being
// C and C++ include "old" C-style string functions such as strlen, strcmp
#include <string.h>
on the other hand
// C++ only for the "new" features of the string class named std::string
#include <string>
-
well i will be dammed, all the other answers state the obvious and i new i had already included <string.h> and the code runs on my Raspberry Pi Pico but wont run on Ubuntu and for the life of me i couldn't understand why. Having zero votes i dident hold out hope this would make any difference but tried it anyway and my problem is fixed so you have my upvote. i wish you would update this answer as to what the difference actually is.Jay Dee– Jay Dee2024年10月04日 07:15:37 +00:00Commented Oct 4, 2024 at 7:15
You need to add
#include <string>
Here you are trying to access string noun::
but made no namespace named string noun
.
You are trying to access a private file.
#include
the things you want to use? I suspect these questions have the same answer...