当虚拟不起作用时

2023-12-01

目前我的 C++ 类中有一个奇怪的错误。我有一个 ActiveX 包装类(作为 wxWidgets 的一部分),我向其中添加了一个新的虚拟函数。我有另一个类继承自 ActiveX 类 (wxIEHtmlWin),但是 ActiveX 类总是调用它自己的函数,而不是 wxIEHtmlWin 中覆盖它的函数。

我不明白为什么会发生这种情况。我将函数设置为纯虚拟函数,现在程序在执行函数调用时崩溃,但在其他情况下编译正常。有什么方法可以禁用虚拟功能或者我在 Visual Studio 中发现了错误吗?

ActiveX类

protected:
virtual FrameSite* getNewFrameSite()=0;

wxIEHtmlWin 类

class wxIEHtmlWin : public wxActiveX
{
protected:
    FrameSite* getNewFrameSite();
}

FrameSite* wxIEHtmlWin::getNewFrameSite()
{
    return new gcFrameSite(this);
}

编辑:我添加了另一个测试函数(返回一个 int),但仍然搞砸了。

链接到有问题的代码:http://lodle.net/public/iebrowser.rar

Edit:

好的,感谢下面的答案,我让它工作了。我所做的是分两部分创建 activex 类(如建议的那样),但是在 wxIEHtmlWin 中我在构造函数代码中调用了第二部分。就像这样:

wxIEHtmlWin::wxIEHtmlWin(wxWindow * parent, wxWindowID id, const wxPoint& pos,const wxSize& size,long style, const wxString& name) : wxActiveX()
{
    wxActiveX::Create(parent, PROGID, id, pos, size, style, name);
    SetupBrowser();
}

现在我知道为什么wxWidgets支持两部分构造了。


您正在从类的构造函数中调用虚拟方法(通过另一个调用)。这将调用当前类的方法,因为子类尚未构造。修复方法是使用 init() 方法并在构造类后调用它。

即像这样:

class wxActivex {
  wxActivex() {}
  virtual void init() {
    getNewFrame();
  }
};

  // in the code that uses these classes:
  wxActivex *activex = new IEHtmlFrame();
  activex->init();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当虚拟不起作用时 的相关文章

  • 将信号/槽(QObject)添加到 QGraphicsItem:性能受到影响?

    我想将信号 槽添加到 QGraphicsItem 以便我可以从另一个线程访问 QGraphicsItemObjects 我知道有两个选项 使用 QGraphicsObject 或从 QObject 和 QGraphicsItem 继承 使用
  • Microsoft Visual C++ 2008 和 R2007b 的 Mex 类型

    我想对 vs2008 和 matlab2007b 使用 mex 类型 我尝试了下面的代码 include
  • C++ 中的可变参数函数声明中省略了逗号

    我习惯于这样声明可变参数函数 int f int n 读书时C 编程语言我发现书中的声明省略了逗号 int f int n the comma has been omitted 这个语法似乎是 C 特定的 因为当我尝试使用 C 编译器编译它
  • 当用户与 DateTimePicker 控件交互时会引发什么事件?

    我是 C 新手 在我的程序中使用 DateTimePicker Value Changed 事件 但我发现当用户单击箭头时发生 ValueChanged 事件 或者如果也以编程方式更改值 我只想识别 DateTimePicker 的用户交互
  • 如何从 OnChange 事件捕获文本框的值

    在我的 C MVC 应用程序中 我有一系列这样生成的文本框 foreach object item in items Html TextBox 渲染的结果是一系列看起来像这样的文本框
  • clang-tidy - 忽略第三方标头代码

    我正在为我的项目使用 CMake 并且我想向项目引入 clang tidy 检查 我用于此目的CMAKE CXX CLANG TIDY and clang tidy用于检查设置的文件 我想在 CI 中使用警告作为错误来可靠地检查提交是否引入
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • 相当于一个允许重复键的排序字典

    我需要一个数据结构 可以通过与对象关联的浮动键对对象进行排序 从低到低的在前 问题是键代表成本 所以经常有重复 我不关心这一点 因为如果两个具有相同的成本 我只会抓住第一个 因为它没有区别 问题是编译器抱怨 是否有一种数据结构的行为方式相同
  • ASP.NET Core 测试 - 没有方法 'public static IHostBuilder CreateHostBuilder(string[] args)

    我正在尝试在测试中设置我的应用程序并在中使用Startup s Configure method context Database EnsureCreated 并期待着Sqlite文件出现在Test sbin文件夹 这是我的代码 using
  • EntityFramework:“参数值超出范围。”

    我在 EntityFramework 模型优先 中保存小数时遇到问题 在我的 EDMX 中 我声明我的属性为 Decimal 30 10 然后我尝试保存该数字 1215867935736100000 结果是 Parameter value
  • “上下文模式”的这种实现看起来不错吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有多个处理单元可能存在于一个数组中 每个处理单元都有自己的参数 我想使用以下方式传达每个处理单元的参数上下文模式在它被建议作为另一个问题的解答 ht
  • 使用工作表作为数据源的 VSTO Excel 的简单示例

    我想我遇到了 最简单的答案是最难找到的答案 的情况 而且我还没有遇到过任何搜索能够以直接的方式给我这个答案 这是为了Excel 2010 and VS 2010在现有 VSTO C 项目中 我有一个 Excel 工作表 其中包含 4 列数据
  • 如何从 UNC 中提取服务器名称

    谁能告诉我如何从 UNC 中提取服务器名称 ex 服务器名称 目录 目录 编辑 我很抱歉 但看起来我需要澄清一个错误 路径实际上更像是 服务器名 d 目录 我知道这可能会改变一些事情 怎么样Uri Uri uri new Uri serve
  • 如何获取字符串宽度

    我需要在类库中构建一个函数 该函数接受一个字符串和该字符串的特定字体 然后获取字符串的宽度 那么我怎样才能得到字符串边界宽度呢 另一种方法是使用TextRenderer 并致电its MeasureString http msdn micr
  • Python NET 调用具有返回值和输出参数的 C# 方法

    我有以下静态 C 方法 public static bool TryParse string s out double result 我想使用 Python NET 包从 Python 调用它 import clr from System
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • 我应该在查询时调用 ToListAsync()

    不久前 我开始接触 C 并正在寻找一些如何编写代码的最佳实践 现在 我正在使用 EF Core 并具有以下代码 var details dbContext Details Where x gt x Name Button foreach v
  • 如何为用户提供给定 boost::spirit 语法的自动完成建议?

    我正在使用 Boost Spirit 在我的 C GUI 应用程序中为非技术用户构建简单的 数据过滤器 语言 语言与纯英语非常相似 并且可以解析为 AST 我被要求使该过程尽可能对用户友好 因此我希望提供类似 CLang 的错误消息 无法识
  • 在 Winforms 中,PreviewKeyDown() 从未针对任何键触发

    我最初试图让我的程序获取箭头键 上 下 左 右 的输入 但发现在 KeyDown 中这些键从未出现过 后来我发现我可以通过进入 PreviewKeyDown 函数并设置来启用箭头键 e IsInputKey true 及其周围的任何条件和逻
  • 串行端口轮询和数据处理

    我正在尝试通过微控制器从传感器的多个串行端口读取数据 每个串口将接收超过2000个测量值 每个测量值7个字节 全部为十六进制 而且他们同时开火 现在我正在从 4 个串行端口进行轮询 另外 我将每个测量值转换为字符串并将其附加到字符串构建器

随机推荐

  • PHP:使用来自 php 的参数调用 javascript 函数

    我正在尝试使用 PHP 变量参数调用 JavaScript 函数 我尝试了两种方法 在 PHP 中使用 echo 中的脚本标签调用 JavaScript 函数 IE 将 PHP 变量值赋给 JavaScript 变量
  • 为什么 Numba 不改进这个递归函数

    我有一个结构非常简单的真 假值数组 the real array has hundreds of thousands of items positions np array True False False False True True
  • 按组计算平均值

    我有一个类似于此的大型数据框 df lt data frame dive factor sample c dive1 dive2 10 replace TRUE speed runif 10 gt df dive speed 1 dive1
  • 安卓兼容包

    尝试使 Fragments 示例在低于 11 SDK 的版本上运行时 出现错误 setListAdapter new ArrayAdapter
  • 从数据绑定 DevExpress CheckedListBoxControl 获取项目索引

    我试图从以下位置找到特定值的索引选中列表框控件 CheckedListBoxControl 有一个 DataSource DisplayMember ValueMember 分别设置为 DataTable 和两列 现在我必须将 Checke
  • 如何找到我当前位置附近的位置?

    我需要一些关于使用 android 如何找到我所在位置附近的医院 学校 餐厅 的想法 怎么可能 一步步 Google place api用于访问附近的anloaction地标 Step 1 进入API控制台获取Place API https
  • 如何在 OSGi 中使用 Apache POI

    我想在 OSGi 中使用 Apache POI 通过流式 OOXML API SXSSF 编写 Excel 工作簿 流媒体 API 自 POI 3 9 起可用 由于最新的 Apache POI 3 11 jar 不是捆绑包 让 POI 在
  • Android Studio:编译时 APK META-INF/DEPENDENCIES 中复制的重复文件

    我使用此链接中的说明从 Eclipse 导出项目并导入到 Android Studio http developer android com sdk installing migrate html 当我构建时 出现错误 Duplicate
  • PHP 从 MySQL 导出到 CSV

    我需要将数据从 MySQL 导出到 CSV 但需要从特定 ID 导出 表包含 ID ParentID 和名称 下面是导出所有记录的代码
  • 对 require 的调用期望正好有 1 个字符串文字参数

    我想根据传递下来的道具来渲染图像 第一个注释掉的 filePath 是源文件 我尝试了几种变体 但它总是给我同样的错误 React 文档并没有真正涵盖在 30 多种不同场景的情况下你会做什么 我可以向该组件添加一个状态并让它包含所有文件变体
  • VideoJS:不适用于 IOS

    我使用了 videojs 它在所有浏览器 包括 IE 和 Android 上运行良好 但它不适用于 IOS 设备 iphone 和 ipad IOS 版本 6 这是我用来将视频添加到页面的代码
  • 实体框架是否支持并行异步查询? [复制]

    这个问题在这里已经有答案了 当我们启动多个异步实体框架查询时会发生什么并行运行它们 它们在物理上是并行执行的吗 它们是由实体框架序列化的吗 这是不支持的吗 它会导致异常吗 public async Task QueryDatabase us
  • 给定尺寸的值范围的组合

    我使用以下代码创建数组的索引列表 但是 我希望索引按 Fortran 顺序运行 即内部循环是更快的变化循环 有没有办法在 python 中实现这一点 目前 我得到的输出是 C 顺序的 np transpose np nonzero np o
  • 延迟 JQuery 效果

    我想在延迟几秒钟后淡出一个元素及其所有子元素 但我还没有找到一种方法来指定效果应在指定的时间延迟后开始 setTimeout function foo fadeOut 5000 5000 是五秒 以毫秒为单位
  • 使用 PHP 将数据从 MySQL 下载到 csv 文件

    如何指定从数据库下载的文件 main php include databaseConnection php result mysql query SELECT FROM participants while row mysql fetch
  • 使用 Angular 登录 Twitter

    我正在尝试使用 angular2 实现 singin 功能 也请阅读官方文档从这里 但是没明白流程是怎么回事 我的问题是 访问第一步 即 outh token 的参数是什么 有没有任何教授流程的工作示例或最佳文章 我已经阅读了很多关于 SO
  • 将 JWT SecurityToken 传递给 WCF 客户端

    我需要根据用户名 密码身份验证生成并向客户端颁发令牌 我尝试了多种方法来解决这个问题 但所有方法都遇到了问题 我的第一个计划是在我的 WCF 端点上实施 WS Trust Issue 我找到的示例使用了以下方法 OperationContr
  • 有没有办法覆盖`{}`对象?

    我试图使我的程序中的所有哈希都是 ActiveSupport OrderedHash 我可以通过以下方式重写 Hash new 构造函数 Hash ActiveSupport OrderedHash but class仍然是哈希 def 给
  • 为什么不使用 ASP.NET 中的 GDI+

    有人告诉我 从 ASP NET 使用 GDI 是危险且未定义的 这是因为没有设备上下文的保证吗 有人可以解释一下吗 有哪些替代方案 这是MSDN来源 http msdn microsoft com en us library system
  • 当虚拟不起作用时

    目前我的 C 类中有一个奇怪的错误 我有一个 ActiveX 包装类 作为 wxWidgets 的一部分 我向其中添加了一个新的虚拟函数 我有另一个类继承自 ActiveX 类 wxIEHtmlWin 但是 ActiveX 类总是调用它自己