【问题标题】:C++ virtual (sealed) functionC++ 虚拟(密封)函数
【发布时间】:2010-02-14 03:29:57
【问题描述】:

我在我的 C++ 项目中使用来自 dll 的类。一切正常,直到...

当尝试调用某个方法(在对象浏览器中列出)时,我收到一个错误,指出此方法不是命名空间的成员。

经过调查,我注意到这个方法被列为“virtual void x() seal”。

有没有办法调用这样的函数?

【问题讨论】:

  • Sealed 与 C++ 无关。您是否使用 C++-CLI。如果是这样,请更新您的标签,以便具有适当知识的人可以找到问题。

标签: c++-cli sealed method-call


【解决方案1】:

为了将来参考,我刚刚收到了企业图书馆支持团队的回复。他们发布了指向以下内容的链接:

托管 C++ 和 IDisposable 我正在使用新的托管 C++/CLI 语法编写一些代码,但遇到了这个错误:

错误 C2039:“Dispose”:不是“System::IDisposable”的成员

我开始的代码是这样的:

image->Dispose(); // image implements IDisposable

这给了我同样的编译器错误,所以我想消除一个类/命名空间错误,所以我将其重写为:

((IDisposable ^)image)->Dispose();

这给出了上述错误。哎呀!

解决方法如下:

使用删除。托管 C++ 现在将 Dispose() 隐藏在终结器中。只需删除对象,它会处理其余的。怪诞的。

这真的有效!!!!

【讨论】:

  • 请注意,您可以通过添加四个空格将代码格式化为代码(额外的空格保留为缩进);编辑器工具栏中的“101\n010”按钮将为您执行此操作。恭喜您找到答案。
【解决方案2】:

Sealed 在特定于 .NET 而不是一般 C++ 的 C++ CLI 关键字(托管 C++)中。

函数上的sealed 意味着您不能在派生类型中覆盖该方法。

sealed不代表你不能调用函数,我猜你的函数是private。

【讨论】:

    【解决方案3】:

    我不明白为什么它是虚拟的和密封的,它本身就应该阻止你调用这个函数。根据MSDN 的说法,sealed 关键字无论如何都是专门用于虚拟方法的。

    您是否可以提供有关该功能以及您如何尝试使用它的更多信息?

    【讨论】:

    • 我指的是微软企业库的Logging块中LogWriter类的Dispose函数。该类的所有其他方法和属性都可以正常工作,我在这个中看到的唯一区别就是上面提到的。我尝试像这样使用它:'writer->Dispose();',但我收到一个错误,指出该方法不是 Microsoft::Practices::EnterpriseLibrary::Logging::LogWriter 的成员。非常感谢
    猜你喜欢
    • 2016-02-23
    • 2014-09-13
    • 2012-04-18
    • 2011-07-18
    • 2017-06-10
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    相关资源
    最近更新 更多