不同的编译器似乎有大约TR1不同的想法。 G ++似乎只接受包括所述类型的:

#include <tr1/unordered_map>
#include <tr1/memory>
...

虽然微软编译器只接受:

#include <unordered_map>
#include <memory>
...

至于我了解TR1,微软的方法是正确的。

有没有办法让G ++接受的第二个版本? 在便携式的方式如何,一般把手TR1一个?

有帮助吗?

解决方案

在计算机上安装的推动作用。结果 添加下面的目录搜索路径。

<升压安装目录> /升压/ TR1 / TR1

在这里看到的细节升压TR1

现在,当你包括<内存>你的内存TR1版本具有的std :: TR1的:: shared_ptr的,然后包括<内存>的特定于平台的版本,以获得所有正常的东西。

其他提示

#ifdef _WIN32
    #include <unordered_map>
    #include <memory>
#else
    #include <tr1/unordered_map>
    #include <trl/memory>
#endif

也许最好的方法是简单地使用升压库现在,在许多情况下,他们有一个替代品类似接口TR1的功能,并且是刚刚在不同的(但一致的)报头的路径和命名空间。这对那些甚至没有的开始的实施的C ++ 0x编译器工作的优势。并有大量的不在TR1在所有有用的升压库:

可替换地,在G ++,可以尝试通过--std = GNU ++ 0x中在命令行上。这适用于,至少。然后,使之在标准:: TR1可用:

namespace std { namespace tr1 { using namespace std; } }

这是恶,自然。我高度推荐升压加以取代:)

一点点哈克也许是的,但你可以简单地编译器TR1目录添加到您的包含路径。

如果在Windows下,添加“TR1”目录到系统路径。然后#include <memory>应该工作。

我问自己同样的问题。不幸的是,技术报告并没有说头应该如何被包括在内。它仅定义了扩展应当在::的std :: TR1命名空间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top