一个很简单但很诡异的问题(error C2906)

dragon8021 2008-04-28 10:30:26
先问另一个问题,就是用vs2008如何生成能在其他机子上运行的可执行文件啊,是一些很简单的控制台程序.(生成release版的有时候可以,有时候还是不行)...
然后就是这个问题,声明了一个类模版,里面有五个函数,这五个函数都对string类进行了特化,其他四个函数都没有问题,就是其中的一个insert函数的特化编译不通过.
而且只是在vs2008中编译不通过,在vs2005和vs6.0中都是可以的~~
错误提示是:d:\my documents\myprojects\hash\hash.h(104) : error C2906: “int Hash<T>::insert(T)”: 显式专用化需要“template <>”
with
[
T=std::string
]
d:\my documents\myprojects\hash\hash.h(104) : error C2908: 显式专用化;已实例化“int Hash<T>::insert(T)”
with
[
T=std::string
]
程序在附件中给出了,下面大致的写下,是哈希表的实现.
template <typename T>
class Hash{
public:
Hash();
void input();
int insert(T entry);
int retrieve(T key);
private:
T table[_size];
int hash(T entry);
};
template <typename T> //这两个函数都是没有问题的
int Hash<T>::hash(T entry){
return (int)entry%p;
}

int Hash<string>::hash(string entry){
char first=entry[0];
return int(first)%p;
}

template <typename T>
Hash<T>::Hash(){
for(int i(0);i<_size;i++) table[i]=NULL;
}

Hash<string>::Hash(){}


template <typename T> //这两个比较复杂的函数也是可以的
void Hash<T>::input(){
...
}
void Hash<string>::input(){
...
}

template <typename T>
int Hash<T>::retrieve(T key){
...
}

int Hash<string>::retrieve(string key){
...
}


template <typename T>
int Hash<T>::insert(T entry){
...
}

int Hash<string>::insert(string entry){ //唯一不行的就是这里,看不出它与前面的有什么不同的说
...
}
...全文
379 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
我也想知道,正在找這方面的資料~~~~~
knowledge_Is_Life 2008-04-30
  • 打赏
  • 举报
回复
有问题请先GOOGLE,BAIDU
dragon8021 2008-04-29
  • 打赏
  • 举报
回复
不行呢,无论是加template<>还是template <typename T>甚至是template <typename T>~~
真相重于对错 2008-04-28
  • 打赏
  • 举报
回复
vs2008 还没用过
try

template<> int Hash<string>::insert(string entry){
.....
}

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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