#include<vector>typedef int ID_;template<const ID_ id>class C{public:void say(){};}typedef std::vector<C> CVec;//报错typedef std::vector<C<ID_>> CVec;//报错typedef std::vector<C<int>> CVec;//报错int main(){CVec vec;return 0;}//
1 回答
人到中年有点甜
TA贡献1895条经验 获得超7个赞
const ID_ id 中的 const 会被编译器忽略掉, 可以不写(这个不算错误).
这是一个最基本的Error: 类定义 后面 要有 ; 结尾.
ID_ 既然是 int 的 alias, 那 类C 就是一个 非类型实参的类模板. 也就是说, C<> 的 <> 中应该是个 int的数字, 不能是 int 或者 ID_, 或者 其它类型.
对于 C++98 C++03 而言, vector<C<5> > 中最后面的 两个 大于号之间 必须要有至少一个空格. 这是语法规定. 除非你的编译器支持 C++11, 而且你在编译的时候 指定了编译选项
1 -std=c++14
或者
1 -std=c++11
最后, 一个修改后的版本:
#include<vector> typedef int ID_; template <ID_ id> class C { public : void say() {}; }; //typedef std::vector<C> CVec;//报错 //typedef std::vector<C<ID_>> CVec;//报错 //typedef std::vector<C<int>> CVec;//报错 typedef std::vector<C<1> > CVec; // 注意: 这三个是不同的类型 typedef std::vector<C<2> > CVec; // 注意: 这三个是不同的类型 typedef std::vector<C<999> > CVec; // 注意: 这三个是不同的类型 int main() { CVec vec; return 0; } |
- 1 回答
- 0 关注
- 128 浏览
添加回答
举报
0/150
提交
取消