我有一个像这样的代码片段
map<string, map<string, map<string, float> > > map_f;
map<string, map<string, map<string, string> > > map_s;
map<string, map<string, map<string, double> > > map_d;
我只想简明扼要地编写这段代码:
myMap<float> map_f;
myMap<string> map_s;
myMap<double> map_d;
所以我尝试使用template
和using
来实现这一目标:
template<type T>
using myMap = map<string, map<string, map<string, T> > >;
但是,我收到了一个错误:
error: expected expression
template<type T>
我的问题是,如何修改此代码以及此错误的含义是什么?
代码已经显示出来了:
#include <string>
#include <map>
using namespace std;
int main()
{
template<typename T>
using myMap = map<string, map<string, map<string, T> > >;
return 0;
}
我在c++ 4.2.1 @ mac osX 10.13.2
上编译它:
g++ -std=c++11 temp_def_cls.cxx -o main
我收到了错误:
temp_def_cls.cxx:7:3: error: expected expression
template<typename T>
^
1 error generated.
答案 0 :(得分:1)
template<typename T>
using myMap = map<string, map<string, map<string, T> > >;
type
在C ++中并不特别。您需要keyword typename
(或class
此处)。
将该指令移出main()
。我使用了GCC 7.2.0,消息更加清晰:
t.cpp: In function ‘int main()’: t.cpp:7:3: error: a template declaration cannot appear at block scope template<typename T> ^