在C ++中定义地图类型的地图?

时间:2015-07-31 04:18:34

标签: c++ unordered-map

我正在尝试定义从longmaplongFILE *的无序地图,但不断收到编译错误。知道怎么纠正吗?

#include <string>
#include <iostream>
#include <stdio.h>
#include<unordered_map>
using namespace std;

typedef unsigned long ulong;
typedef unsigned int uint;
typedef unsigned short uint16;
typedef unsigned char uchar;

typedef std::unordered_map<long, std::unordered_map<long, *FILE> > TYPE1;

int main(int argc, char *argv[]) {
    TYPE1 x;
    x[1][2] = fopen(argv[1], "rb");

    return 0;
}

这是编译器错误

$ g++ -std=c++11 te2a.cc
te2a.cc:15:64: error: template argument 2 is invalid
te2a.cc:15:64: error: template argument 5 is invalid
te2a.cc:15:66: error: template argument 2 is invalid
te2a.cc:15:66: error: template argument 5 is invalid
te2a.cc:15:73: error: invalid type in declaration before ‘;’ token
te2a.cc: In function ‘int main(int, char**)’:
te2a.cc:19:5: error: invalid types ‘TYPE1 {aka int}[int]’ for array subscript

2 个答案:

答案 0 :(得分:4)

这是放置星号:

typedef std::unordered_map<long, std::unordered_map<long, FILE*>> TYPE1;

会这样做。

答案 1 :(得分:1)

注意星号:

typedef std::unordered_map<long, std::unordered_map<long, *FILE>> TYPE1;

将其更改为:

typedef std::unordered_map<long, std::unordered_map<long, FILE*>> TYPE1;