gpt4 book ai didi

c++ - GCC 4.1.1 不使用 tr1::unordered_map 编译一些代码

转载 作者:行者123 更新时间:2023-11-30 02:57:44 25 4
gpt4 key购买 nike

我有以下代码来测试一个更大程序中的一个概念,我尝试在 Linux 上使用 GCC 4.1.1 进行编译。由于公司环境限制,我无法使用较新版本的编译器,因此我必须使其编译并使用当前可用的编译器版本。

// test.cpp - my tr1::unordered_map usage example
#include <iostream>
#include <tr1/unordered_map>

namespace YY {

class X { public: X(int z_val = 0); private: int z; };
inline X::X(int z_val) : z(z_val) {}

enum XTE { Xt1, Xt2, Xt3 };

}

namespace std { namespace tr1 {

#define _my_tr1_hashtable_define_trivial_hash(T) \
template<> \
struct hash<T> \
: public std::unary_function<T, std::size_t> \
{ \
std::size_t \
operator()(T val) const \
{ return static_cast<std::size_t>(val); } \
}

_my_tr1_hashtable_define_trivial_hash(YY::XTE);

#undef _my_tr1_hashtable_define_trivial_hash
}}


namespace YY {
typedef std::tr1::unordered_map<long long, X*> TXM;
typedef std::tr1::unordered_map<XTE, TXM> TTXM;
}

int main()
{
YY::TTXM m;
std::cout << m.size();
return 0;
}

然后我尝试编译这段代码,gcc 给我以下错误:

$ g++ -c test.cpp/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/hashtable: In instantiation of Б─≤Internal::hash_code_base, Internal::extract1st >, std::equal_to, std::tr1::hash, Internal::mod_range_hashing, Internal::default_ranged_hash, false>Б─≥:/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/hashtable:1014:   instantiated from Б─≤std::tr1::hashtable, std::allocator >, Internal::extract1st >, std::equal_to, std::tr1::hash, Internal::mod_range_hashing, Internal::default_ranged_hash, Internal::prime_rehash_policy, false, false, true>Б─≥/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/unordered_map:63:   instantiated from Б─≤std::tr1::unordered_map, std::equal_to, std::allocator >, false>Б─≥/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/bits/stl_pair.h:74:   instantiated from Б─≤std::pair, std::equal_to, std::allocator >, false> >Б─≥/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/hashtable:413:   instantiated from Б─≤Internal::extract1st, std::equal_to, std::allocator >, false> > >Б─≥/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/hashtable:861:   instantiated from Б─≤Internal::hash_code_base, std::equal_to, std::allocator >, false> >, Internal::extract1st, std::equal_to, std::allocator >, false> > >, std::equal_to, std::tr1::hash, Internal::mod_range_hashing, Internal::default_ranged_hash, false>Б─≥/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/hashtable:1014:   instantiated from Б─≤std::tr1::hashtable, std::equal_to, std::allocator >, false> >, std::allocator, std::equal_to, std::allocator >, false> > >, Internal::extract1st, std::equal_to, std::allocator >, false> > >, std::equal_to, std::tr1::hash, Internal::mod_range_hashing, Internal::default_ranged_hash, Internal::prime_rehash_policy, false, false, true>Б─≥/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/unordered_map:63:   instantiated from Б─≤std::tr1::unordered_map, std::equal_to, std::allocator >, false>, std::tr1::hash, std::equal_to, std::allocator, std::equal_to, std::allocator >, false> > >, false>Б─≥test.cpp:42:   instantiated from here/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/hashtable:863: error: Б─≤Internal::hash_code_base::m_h1Б─≥ has incomplete type/usr/lib/gcc/x86_64-redhat-linux/4.1.1/../../../../include/c++/4.1.1/tr1/functional:1101: error: declaration of Б─≤struct std::tr1::hashБ─≥

test.cpp:42: instantiated from hereis

YY::TTXM m;

如果我改变

typedef std::tr1::unordered_map<XTE, TXM> TTXM;

进入

typedef std::tr1::unordered_map<XTE, TXM*> TTXM;

它编译成功,但这不是我想要做的。任何想法,建议,如何使这项工作?

最佳答案

它提示它没有long long的哈希函数,所以只需添加

_my_tr1_hashtable_define_trivial_hash(long long);

你应该可以开始了。


附言我认为使用 TXM* 而不是 TXM 的原因是因为如果它是一个指针,编译器不必解析 TXM 类型,所以它不会沿着弄清楚它没有一切的路径走下去需要构造该类型.. 即一个 long long 哈希函数。如果您稍后尝试创建一个 TXM 对象的实例,它会向您提示并出现与您现在看到的类似的错误。

关于c++ - GCC 4.1.1 不使用 tr1::unordered_map 编译一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com