关于模板的模板参数问题

ryfdizuo 2007-10-07 07:50:16
头文件内容:
#include <deque>
#include <stdexcept>
#include <memory>

template <typename T,
template <typename ELEM,
typename = std::allocator<ELEM> >
class CONT = std::deque>
class Stack
{
private:
CONT<T> elems;
public:
void push(T const &);
void pop();
T top() const;
bool empty() const
{
return elems.empty();
}

template<typename T2,
template<typename ELEM2,
typename = std::allocator<ELEM2>
>class CONT2>
Stack<T, CONT>& operator= (Stack<T2, CONT2> const &);
};

template <typename T, template<typename, typename> class CONT>
void Stack<T, CONT>::push(T const &elem)
{
elems.push_back(elem);
}

template <typename T, template<typename, typename> class CONT>
void Stack<T, CONT>::pop()
{
if(elems.empty())
{
throw std::out_of_range("Stack<>::pop() : stack is empty");
}
elems.pop_back();
}


template <typename T, template<typename, typename> class CONT>
T Stack<T, CONT>::top() const
{
if(elems.empty())
{
throw std::out_of_range("Stack<T,CONT>::top() : empty stack");
}
return elems.back();
}

template <typename T, template<typename, typename> class CONT>
template <typename T2, template<typename, typename> class CONT>
Stack<T, CONT>&
Stack<T, CONT>::operator= (Stack<T2, CONT> const &op2)
{
if( (void*)this == (void*)&op2 )
{
return *this;
}

Stack<T2, CONT> tmp(op2);

elems.clear();

while(!tmp.empty())
{
elems.push_back(tmp.top());
tmp.pop();
}

return *this;
}

//.cpp

#include <iostream>
#include "stack4.h"
#include <string>
#include <cstdlib>
#include <vector>

int main()
{
try{
Stack<int> intstack;
}
catch(std::exception const &ex)
{
std::cerr << "Exception : " << ex.what() << std::endl;
}

return 0;
}

帮忙看下, 什么问题??
谢谢了.
...全文
471 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ryfdizuo 2007-10-09
  • 打赏
  • 举报
回复
哦,那有可能是编译器的问题了,没办法了,
谢谢了!!
  • 打赏
  • 举报
回复
我的代码是编译测试后的代码
在vs2005下是正常的
  • 打赏
  • 举报
回复


template <typename T, template <typename, typename > class CONT >
template <typename T2, template <typename, typename > class CONT >
Stack <T, CONT >&
Stack <T, CONT >::operator= (Stack <T2, CONT > const &op2)
{
if( (void*)this == (void*)&op2 )
{
return *this;
}

Stack <T2, CONT > tmp(op2);

elems.clear();

while(!tmp.empty())
{
elems.push_back(tmp.top());
tmp.pop();
}

return *this;
}

改为

template <typename T, template <typename, typename > class CONT >
template <typename T2,
template <typename ELEM2,typename = std::allocator <ELEM2 > >class CONT2 >
Stack <T, CONT >&
Stack <T, CONT >::operator= (const Stack <T2, CONT2> &op2)
{
if( (void*)this == (void*)&op2 )
{
return *this;
}
Stack <T2, CONT > tmp(op2);
elems.clear();
while(!tmp.empty())
{
elems.push_back(tmp.top());
tmp.pop();
}
return *this;
}
visame 2007-10-08
  • 打赏
  • 举报
回复
有编译错误信息吗?
ryfdizuo 2007-10-08
  • 打赏
  • 举报
回复
二楼的大哥所指出的错误确实有;但是改了以后还是编译不过去.

e:\程序设计\练习\templates 中文版\stack4.h(11): error C3201: 类模板“std::deque”的模板参数列表与模板参数“CONT”的模板参数列表不匹配
e:\程序设计\练习\templates 中文版\stack4.h(15): error C2976: “CONT” : 模板参数太少
e:\程序设计\练习\templates 中文版\stack4.h(11) : 参见“CONT”的声明
e:\程序设计\练习\templates 中文版\stack4.h(30) : 参见对正在编译的类模板实例化“Stack<T,CONT>”的引用
e:\程序设计\练习\templates 中文版\stack4.cpp(10): error C3201: 类模板“std::deque”的模板参数列表与模板参数“CONT”的模板参数列表不匹配
e:\程序设计\练习\templates 中文版\stack4.h(29): error C3201: 类模板“std::deque”的模板参数列表与模板参数“CONT”的模板参数列表不匹配
e:\程序设计\练习\templates 中文版\stack4.cpp(10) : 参见对正在编译的类模板实例化“Stack<T>”的引用
with
[
T=int
]

大家帮忙看看,谢谢了...

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧