C++ VS2010编译器报错:未专用化的类模板不能用模板变量
答案:1 悬赏:70 手机版
解决时间 2021-01-30 20:54
- 提问者网友:你独家记忆
- 2021-01-30 12:37
C++ VS2010编译器报错:未专用化的类模板不能用模板变量
最佳答案
- 五星知识达人网友:duile
- 2021-01-30 12:49
呃, 好多错误...
const ID_ id 中的 const 会被编译器忽略掉, 可以不写(这个不算错误).
这是一个最基本的Error: 类定义 后面 要有 ; 结尾.
ID_ 既然是 int 的 alias, 那 类C 就是一个 非类型实参的类模板. 也就是说, C<> 的 <> 中应该是个 int的数字, 不能是 int 或者 ID_, 或者 其它类型.
对于 C++98 C++03 而言, vector > 中最后面的 两个 大于号之间 必须要有至少一个空格. 这是语法规定. 除非你的编译器支持 C++11, 而且你在编译的时候 指定了编译选项
-std=c++14或者
-std=c++11
最后, 一个修改后的版本:
#include
typedef int ID_;
template
class C
{
public:
void say() {};
};
//typedef std::vector CVec;//报错
//typedef std::vector> CVec;//报错
//typedef std::vector> CVec;//报错
typedef std::vector > CVec; // 注意: 这三个是不同的类型
typedef std::vector > CVec; // 注意: 这三个是不同的类型
typedef std::vector > CVec; // 注意: 这三个是不同的类型
int main()
{
CVec vec;
return 0;
} 最最后, 欢迎交流. :)
追问哇遇到大牛了。
那请问"非类型实参的类模板“有什么用呢?追答template
class MyArray
{
private:
T arr[N]; // N: 这里不是可以让用户指定 建一个多大的数组吗, 这就是它的作用.
};
MyArray intArr10;
MyArray doubleArr100;c++设计的多优雅.
const ID_ id 中的 const 会被编译器忽略掉, 可以不写(这个不算错误).
这是一个最基本的Error: 类定义 后面 要有 ; 结尾.
ID_ 既然是 int 的 alias, 那 类C 就是一个 非类型实参的类模板. 也就是说, C<> 的 <> 中应该是个 int的数字, 不能是 int 或者 ID_, 或者 其它类型.
对于 C++98 C++03 而言, vector
-std=c++14或者
-std=c++11
最后, 一个修改后的版本:
#include
typedef int ID_;
template
class C
{
public:
void say() {};
};
//typedef std::vector
//typedef std::vector
//typedef std::vector
typedef std::vector
typedef std::vector
typedef std::vector
int main()
{
CVec vec;
return 0;
} 最最后, 欢迎交流. :)
追问哇遇到大牛了。
那请问"非类型实参的类模板“有什么用呢?追答template
class MyArray
{
private:
T arr[N]; // N: 这里不是可以让用户指定 建一个多大的数组吗, 这就是它的作用.
};
MyArray
MyArray
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯