g++ 中的显式模板专业化造成了麻烦

2023-12-10

我在将这段代码从 MSVC 转换为 g++ 时遇到问题:

#include <unordered_map>
class A
{
    template <class T> class B;

    template<>
    class A::B<int>
    {

    };

    std::unordered_map<int, long, B<int>> m_Map;
};

当然,这不是标准的 C++,而 VS 仍然允许 GCC (g++) 抛出错误“非命名空间范围中的显式专业化”。现在我按照参考使其符合 C++ 标准http://en.cppreference.com/w/cpp/language/template_specialization:

#include <unordered_map>

class A
{
    template <class T> class B;
    template <> class B<int>;
    std::unordered_map<int, long, B<int>> m_Map;
};

template<>
class A::B<int>
{
    std::size_t operator()(int const& n) const {
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    return 0;
}

唉,现在 VS 给我一个错误

Error   3   error C2079: 'std::_Hash_oper1<true,_Hasher>::_Hashobj' uses undefined class 'A::B<int>'    c:\program files (x86)\microsoft visual studio 12.0\vc\include\xhash

and

 Error  2   error C2139: 'A::B<int>' : an undefined class is not allowed as an argument to compiler intrinsic type trait '__is_empty'   c:\program files (x86)\microsoft visual studio 12.0\vc\include\type_traits

因此,无序映射绝对不想使用它认为的“未定义类”。尽管我提前声明了它。 有谁知道这一切是怎么回事吗?谢谢。


标准库容器不能将不完整类型声明为包含的类型。这会导致未定义的行为,无需诊断(意味着某些编译器可能会接受它,而有些编译器可能会拒绝它或在运行时表现奇怪)。

您必须使用支持不完整类型的不同库(例如boost)中的哈希表,或者重新设计代码。

一个简单的解决办法就是上课B不在此范围内声明A首先

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

g++ 中的显式模板专业化造成了麻烦 的相关文章

随机推荐

  • 从 Java 将多个 PDF 作为单个打印作业打印(物理打印)

    我想在一个打印作业中从java 使用java打印服务 打印多个pdf 我想将多个 pdf 文件作为单个作业发送到打印机 这样 我的 批量 中的所有文档都会一起打印 并且当我从打印机中取出它们时 不会与其他人的打印作业交错 一个批次可能包含数
  • 如何使用 JavaFX TableView 显示基于列的数据集

    我正在尝试从 Swing 切换到 JavaFX 但 TableView 出现问题 我在内存中有一个基于列的通用数据结构 例如List
  • Apple 在 AppStore 中接受的最低 iOS 目标版本?

    我有一个应用程序 我希望在所有 iOS 版本上运行 但我认为 Apple 只接受某个版本及更高版本的应用程序 我认为是 3 0 但不确定 所以我的问题是 您可以发送审核 并获得接受 的最低 iOS 目标版本是多少 如果任何具有丰富 iOS
  • codeigniter 无法在实时页面上工作,在服务器上找不到错误

    我的 codeigniter 在本地主机上完美工作 但在 live 上无法工作 我的 codeigniter 是最新版本 我也尝试较旧的版本 它总是显示在重定向上找不到的页面 routes php 设置是 route default con
  • C++:构造和初始化顺序保证

    我对 C 中的构造和初始化顺序保证有一些疑问 例如 下面的代码有四个类X Y Z and W main函数实例化一个对象class X 其中包含一个对象class Y 并且源自class Z 因此两个构造函数都会被调用 此外 const c
  • 如何优化这些循环(禁用编译器优化)?

    我需要优化一些for在不使用编译器优化标志的情况下循环提高速度 用于学校作业 给定一个特定的Linux服务器 学校拥有的 一个令人满意的改进是使其运行时间低于7秒 一个很大的改进是使其运行时间低于5秒 我这里的这段代码大约需要 5 6 秒
  • 约束命名的目的是什么

    命名约束 唯一 主键 外键 的目的是什么 假设我有一个使用自然键作为主键的表 CREATE TABLE Order LoginName VARCHAR 50 NOT NULL ProductName VARCHAR 50 NOT NULL
  • Java,如何跟踪调用的函数

    我想跟踪Java中调用的函数的开头 结尾 如以下代码 public void foo System out println begin of foo System out println e n d of foo 但维护转储代码System
  • 自动部署在 appBase 子文件夹中找到的 WAR 文件

    我有一个第三方 Web 应用程序 我想通过安装程序将其部署到 Tomcat 5 0 服务器 AutoDeploy 设置为 true 然而 该应用程序由多个 WAR 文件组成 如果我将 WAR 直接放在 webapps 下 它们就会发挥作用
  • 无法实例化应用程序 com.android.tools.fd.runtime.BootstrapApplication ?Android

    我将 Android Studio 更新到版本 2 0 但我遇到了一个问题 不知道为什么 重要错误信息 无法实例化应用程序 com android tools fd runtime BootstrapApplication java lan
  • 当鼠标悬停在图像上时显示放大的图片

    在我的网页上 我想放置一个图像 当鼠标指针悬停在该图像上时 会出现放大版本 根据评论中需求的进一步解释更新了 CSS 解决方案 http jsfiddle net 5sRTX 7 div class effectback img class
  • Python Pandas - 使用另一个数据框列的值更新数据框列

    我正在努力提高 Python 水平 并决定对我的兴趣之一进行一些分析 摔角 在这种情况下 日本摔跤 基本上我正在尝试从另一个数据帧更新一个数据帧中的值 这是我的第一个数据框的样子 Wrestler Matches DMR 0 TETSUYA
  • CORS 策略已阻止从来源“null”访问图像

    我在 OpenLayers 3 中有 JavaScript 应用程序 我的基础层是从本地图块创建的 我只在我的计算机上工作 所以我不知道为什么会出现 CORS 错误 var newLayer new ol layer Tile source
  • 关闭模态 JInternalFrame

    我遵循了方法2本指南 所以现在我有一个 ModalInternalFrame 可以阻止所有其他框架的输入 正如我想要的那样 但是 我对示例进行了一项更改 现在遇到了两个问题 改变 我删除了 JOptionPane 因为重点是显示我自己的窗格
  • 通过按住链接禁用打开新窗口或新选项卡

    我要感谢那些正在阅读本文的人以及您抽出宝贵的时间 咱们直接进入主题吧 我目前正在尝试禁用一项功能 在该功能中 用户不应通过按住链接来打开指向新窗口或选项卡的链接 感谢任何解决此问题的建议或答案 再次感谢 您可以将事件处理程序绑定到所需的链接
  • 强制 GCC 使用单词访问结构

    在 ARM 处理器 HT32F1655 上 寄存器的特定部分需要字访问 来自用户手册 请注意 AHB 总线中的所有外设寄存器仅支持字访问 但海湾合作委员会正在产生一些ldrb 加载字节 和strb 存储字节 打包结构上的指令 这些结构看起来
  • AWS 存储桶策略 - 权限被拒绝

    我正在尝试让另一个 AWS 账户的用户访问该存储桶itv twitterstg archive我添加了以下存储桶策略 他们说他们收到了许可被拒绝的消息 任何人都可以看到此政策的任何问题或推荐我可以尝试的其他内容吗 ps 我已经更改了本示例中
  • 如果用户未登录 Angular2 2.0.0-rc.4,则重定向到登录路由

    这是我的 html 文件 div class container h1 Dohatec Data h1 div class navLinks a Home a nbsp a About Us a nbsp a Pricing a div d
  • 使用 Antair Cordova SQLitePlugin 预填充 Ionic 数据库 [帮助请求]

    INTRO 大家好 首先澄清三点 我的英语不好 所以请提前原谅我的错误 我是新手 如有不准确之处请见谅 我之前已经搜索并尝试过在互联网上找到的解决方案 但仍然无法解决嵌入预填充数据库的问题 THE GOAL 我想开发一个适用于 iOS 和
  • g++ 中的显式模板专业化造成了麻烦

    我在将这段代码从 MSVC 转换为 g 时遇到问题 include