C++ VS2010编译器报错:未专用化的类模板不能用模板变量
#include<vector>typedefintID_;template<constID_id>classC{public:voidsay(){};}typedefs...
#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;
}
// 想请以上的typedef语句该怎么写。。。 展开
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;
}
// 想请以上的typedef语句该怎么写。。。 展开
1个回答
展开全部
呃, 好多错误...
const ID_ id 中的 const 会被编译器忽略掉, 可以不写(这个不算错误).
这是一个最基本的Error: 类定义 后面 要有 ; 结尾.
ID_ 既然是 int 的 alias, 那 类C 就是一个 非类型实参的类模板. 也就是说, C<> 的 <> 中应该是个 int的数字, 不能是 int 或者 ID_, 或者 其它类型.
对于 C++98 C++03 而言, vector<C<5> > 中最后面的 两个 大于号之间 必须要有至少一个空格. 这是语法规定. 除非你的编译器支持 C++11, 而且你在编译的时候 指定了编译选项
-std=c++14
或者
-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;
}
最最后, 欢迎交流. :)
追问
哇遇到大牛了。
那请问"非类型实参的类模板“有什么用呢?
追答
template <typename T, size_t N>
class MyArray
{
private:
T arr[N]; // N: 这里不是可以让用户指定 建一个多大的数组吗, 这就是它的作用.
};
MyArray<int, 10> intArr10;
MyArray<double, 100> doubleArr100;
c++设计的多优雅.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询