派生类的受保护成员未知

2024-02-27

我找到了一个图形的开源类库。当我将它包含在我的项目中时,它有很多错误,我试图修复它们。但是有一个编译错误我无法解决。

基类:

template <typename K, typename W, typename T>
class _base_graph
{
//... 

protected:
    std::map<K, T> nod;
    std::list<edge> edg;
};

派生类:

template <typename K, typename T = void*>
        class graph : public _base_graph<K, void*, T>
{
//...
public:
    void add_edge(const K& k1, const K& k2);
};

方法体:

template <typename K, typename T>
void graph<K, T>::add_edge(const K& k1, const K& k2)
{
    if (nod.find(k1) == nod.end() || nod.find(k2) == nod.end()) // <-- error!!
        throw std::string("add_edge: Node does not exist");

    // ...
}

但我的 gcc 编译器向我显示一个错误:

错误:“nod”未在此范围内声明

您可以在以下位置找到并测试 mycodethis http://ideone.com/F5u7xI在线编译器。


You need

this->nod.find(k2);

or

_base_graph<K, void*, T>::nod.find ....;

基类和派生类都是模板,并且在您的代码中nod是一个非依赖名称,因此在以下点查找graph的声明。这是第一阶段两阶段查找。在这个阶段,编译器(假设它遵循标准的名称查找规则)不可能知道什么nod means, 因为它直到第二阶段才考虑基类。所以有必要告诉编译器nod应该在第二阶段查找。为此,我们明确告诉它nod通过使用上述形式之一位于基类中。

出现这种行为的原因是在派生类'定义,应该不可能知道什么_base_graph<K, void*, T>::包含,以允许添加甚至隐藏名称的模板专业化。因此,上面的技巧可以确保当所有信息都可用时,在派生类实例化时查找名称。

总而言之,这里有两个问题:

  1. nod不是依赖名称,因此将在第一阶段查找它。
  2. 基类模板,声明nod,直到第二阶段才可用,因此无法解析名称。

通过使用this->nod or _base_graph<K, void*, T>::nod,我们显式地处理依赖名称,强制查找在第二阶段进行。

参见第 7 点至第 10 点here http://womble.decadent.org.uk/c++/template-faq.html#two-phase.

感谢@DavidRodriguez-dribeas 澄清了两阶段查找的一些细节。

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

派生类的受保护成员未知 的相关文章

  • 检查两个数是否是彼此的排列?

    给定两个数字 a b 使得 1 例如 123 是 312 的有效排列 我也不想对数字中的数字进行排序 如果您指的是数字的字符 例如 1927 和 9721 则 至少 有几种方法 如果允许排序 一种方法是简单地sprintf将它们放入两个缓冲
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 如何将图像和 POST 数据上传到 Azure 移动服务 ApiController 终结点?

    我正在尝试上传图片and POST表单数据 尽管理想情况下我希望它是json 到我的端点Azure 移动服务应用 我有ApiController method HttpPost Route api upload databaseId sea
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • WPF TabControl,用C#代码更改TabItem的背景颜色

    嗨 我认为这是一个初学者的问题 我搜索了所有相关问题 但所有这些都由 xaml 回答 但是 我需要的是后台代码 我有一个 TabControl 我需要设置其项目的背景颜色 我需要在选择 取消选择和悬停时为项目设置不同的颜色 非常感谢你的帮助
  • 如何返回 json 结果并将 unicode 字符转义为 \u1234

    我正在实现一个返回 json 结果的方法 例如 public JsonResult MethodName Guid key var result ApiHelper GetData key Data is stored in db as v
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • Javascript 在原型中使用值类型设置对象属性? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 查询 Mongo 中嵌套列表是否存在

    我在 Mongo 中有一个文档 其结构如下 id ObjectId 4eea7237d0ba3a04f20008fb code b2677c2809c844cc9d7e3e4ff8d95b46 city id 4 datetime ISOD
  • 使用 GitHub GUI 提交和同步,一切都消失了

    因此 在 GitHubGUI 中 像往常一样 我进行了更改 然后单击Commit Sync短暂地弹出 合并冲突 对话框 然后一切都消失了 我将最新的更改与远程存储库同步 我所做的一切都消失了 以前在我不断点击后也发生过这种情况commit
  • 如何在 iOS 中使用位图/RGB 数据制作图像动画

    我正在 iPhone 上编写游戏程序 并且有一个想要制作动画的图像 例如位图中行走的人 位图随时间变化 如何有效地将位图添加到屏幕 UIView 加载图像序列的最有效方法是使用 PVR 格式图像并将其作为 OpenGL 纹理加载 PVR 图
  • 特定时间的深度睡眠

    我需要在特定时间激活外设 然后休眠一段时间 然后再次停用外设 我可以用一个简单的方法来做到这一点sleep但这会让我的 ESP32 保持唤醒状态并消耗电池 有没有办法在规定的时间内进入深度睡眠 然后再次醒来 理想情况下 我会简单地安排在一定
  • 为androidTest添加布局资源

    我想将布局 xml 文件添加到我的androidTest仅用于测试的文件夹 I added res layout文件夹到androidTest并尝试向其中添加布局文件 但它给出了错误URI is not registered for xml
  • 无法在 Android 应用程序运行时加载库

    我正在开发 android 应用程序 其中我使用 JNI 作为本机 c 代码 我在 android 2 0 版本和 ndkr3 上构建这个应用程序 它运行良好 现在 当我更改android sdk版本1 5和api版本3时 我遇到了无法打开
  • JavaScript 中获取两个日期之间的差异? [复制]

    这个问题在这里已经有答案了 如何获得全天中 2 个日期之间的差异 我不需要一天的任何分数 var date1 new Date 7 11 2010 var date2 new Date 12 12 2010 var diffDays dat
  • 如何使用 Ember CLI 进行生产就绪构建?

    我一直在 Ember 中构建一个 Web 应用程序 并准备将其放在服务器上以供公众使用 我只想创建 dist 文件夹 然后我将通过 FTP 手动将其上传到服务器 我如何在 Ember 中为此构建一个 dist 我不知道如何打开缩小并从构建中
  • Express 和 nginx net::ERR_CONTENT_LENGTH_MISMATCH

    我正在开发一个 Express 驱动的网站 它通过 nginx 代理 有时在浏览器中加载页面时 我会得到以下信息 GET http myapp local css bootstrap css net ERR CONTENT LENGTH M
  • 如何将参数传递给 p:dataTable 中的 valueChangeListener?

    我正在打电话valueChangeListener on a
  • 根据另一个单元格中的值更改单元格中的值

    搜索了这个但找不到方法 我希望能够将一个单元格中的值转换为不同单元格中的另一个值 如下所示 当列中的单元格A包含Y在列中设置相同数量的单元格B to Male或者当列中的单元格A包含N在列中设置相同数量的单元格B价值Female 例如 A2
  • C相当于fstream的peek

    我知道在 C 中 您可以使用以下命令查看下一个字符 in peek 当尝试 查看 C 中文件的下一个字符时 我该如何解决这个问题 fgetc http opengroup org onlinepubs 007908799 xsh fgetc
  • 使用 Glumpy 将 NumPy 数组显示为持续更新的图像

    我有一个使用 NumPy 和 SciPy 在 Python 中运行的模拟模型 它会生成一个 2D NumPy 数组作为每次迭代的输出 我一直使用 matplotlib 和 imshow 函数将此输出显示为图像 然而 我发现了 Glumpy
  • 将对象列表分组为尽可能少的子列表,但不超过最大总和

    我正在尝试编写一种方法 将对象分组到最少量的子列表中 而无需混合类型 对象上的 int 字段 或其值的总和超过定义的最大值 它应该看起来像这样 List
  • Maven:如何安装 mvnsh?

    我怀疑我的处理方式完全错误 我听说过mvnsh http shell sonatype org 并想尝试一下 以减少构建时的延迟 但我完全不知道如何做到这一点 我仍在学习 Maven 并在两者之间进行错误的比较mvn和类似的工具gem ca
  • 将使用 AWT 和 Swing 绘制电影的 Java 应用程序移植到服务器端

    我正在使用一些代码 使用 AWT 和 Swing 功能将动画输出写入桌面 它使用 2D 图形进行绘制并以字体呈现文本 此代码可以使用 Java Media Framework 将动画保存到电影文件 我想将此代码移植到纯服务器端环境 以便使用
  • 在 Javascript 中从 JSON 数组查找名称值对的有效方法

    我当前正在调用一个服务 该服务将响应作为具有名称值对的对象数组发送 下面是一个例子 这些名称值对的数量可以是任意顺序 但我只想访问名称 name2 的值 除了循环遍历每个对象并检查名称以获得 name2 的相应值之外 还有其他有效的方法吗
  • 按位右展开算法

    本来这篇文章要求逆绵羊和山羊操作 但我意识到这超出了我的实际需要 所以我编辑了标题 因为我只需要一个右展开算法 http programming sirrida de bit perm html c e 这更简单 我在下面描述的示例仍然具有
  • 派生类的受保护成员未知

    我找到了一个图形的开源类库 当我将它包含在我的项目中时 它有很多错误 我试图修复它们 但是有一个编译错误我无法解决 基类 template