C ++ std :: hash专门化重复符号错误

时间:2017-02-13 06:45:27

标签: c++ templates linker template-specialization

我有以下代码:

在Foo.h中:

# 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;
    }
}

在Foo.cpp中:

#include "Foo.h"
namespace std {
    size_t hash<Foo>::operator()(const Foo &foo) const {
        // calculate and return hash value.
    }
}

在Bar.cpp中:

#include "Foo.h"
void func() {
    // use Foo as key of std::unordered_map
}

编译后,我总是遇到链接器错误:重复符号#$%Foo @#$ * in:Foo.cpp.o,Bar.cpp.o

我花了很多时间在这上面,但仍然无法弄清楚原因。如果有人可以帮助我,我真的很感激。我还有另一个问题,任何人都可以使用前向声明的类型来专门化模板吗?谢谢!

0 个答案:

没有答案