Reputation: 17553
I am doing everything correctly as far as I can tell and I have gotten the error message:
error: 'unordered_map' does not name a type
error: 'mymap' does not name a type
In my code, I have:
#include <unordered_map>
using namespace std;
//global variable
unordered_map<string,int> mymap;
mymap.reserve(7000);
void main {
return;
}
I don't see what can be missing here....
EDIT: when I update my declaration to
std::tr1::unordered_map<string,int> mymap;
I an able to eliminate the first error, but when I try to reserve, I still get the second error message.
EDIT2: As pointed out below, reserve must go into main and I need to compile with flag
-std=c++0x
However, there still appear to be errors related to unordered_map, namely:
error: 'class std::tr1::unordered_map<std::basic_string<char>, int>' has no member named 'reserve'
Upvotes: 17
Views: 68189
Reputation: 95
If you want to support
<unordered_map>
for versions older than c++11 use
#include<tr1/unordered_map>
and declare your maps in the form :-std::tr1::unordered_map<type1, type2> mymap
which will use the technical report 1 extension for backward compatibility.
Upvotes: 6
Reputation: 6682
Compile with g++ -std=c++11
(my gcc version is gcc 4.7.2
) AND
#include <unordered_map>
#include <string>
using namespace std;
//global variable
unordered_map<string,int> mymap;
int main() {
mymap.reserve(7000); // <-- try putting it here
return 0;
}
Upvotes: 25
Reputation: 23624
You can't execute arbitrary expressions at global scope
, so you should put
mymap.reserve(7000);
inside main.
This is also true for other STL containers like map and vector.
Upvotes: 3