我有以下代码:
# pragma once
struct Foo {
std::string a, b;
private:
// some method declaration
}
namespace std {
template<>
struct hash<Foo> {
size_t operator()(const Foo &foo) const;
}
}
#include "Foo.h"
namespace std {
size_t hash<Foo>::operator()(const Foo &foo) const {
// calculate and return hash value.
}
}
#include "Foo.h"
void func() {
// use Foo as key of std::unordered_map
}
编译后,我总是遇到链接器错误:重复符号#$%Foo @#$ * in:Foo.cpp.o,Bar.cpp.o
我花了很多时间在这上面,但仍然无法弄清楚原因。如果有人可以帮助我,我真的很感激。我还有另一个问题,任何人都可以使用前向声明的类型来专门化模板吗?谢谢!