一个很简单但很诡异的问题(error C2906)
先问另一个问题,就是用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){ //唯一不行的就是这里,看不出它与前面的有什么不同的说
...
}