如何在 C++/CLI 中转发声明委托?

发布于 2024-07-24 10:29:51 字数 375 浏览 3 评论 0原文

如何?

以下内容不起作用:

delegate MyDelegate;
ref class MyDelegate;
delegate void MyDelegate;

以下内容适用于声明:

public delegate void MyDelegate(Object ^sender, MyArgs ^args);

但是将其用作前向声明给了我

error C3756: 'MyNameSpace::MyDelegate': delegate definition conflicts with an existing symbol

How?

The following did not work:

delegate MyDelegate;
ref class MyDelegate;
delegate void MyDelegate;

The following works for declaration:

public delegate void MyDelegate(Object ^sender, MyArgs ^args);

But using it as a forward declaration gives me

error C3756: 'MyNameSpace::MyDelegate': delegate definition conflicts with an existing symbol

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

这项工作是为我而做的;

stdafx.h:

public delegate void Handler(bool isit);

cli1.cpp:

#include "stdafx.h"
using namespace System;

namespace MY {
   namespace Namespace
   {
       public ref class Objeks
       {
           public: Objeks() {}
           public: event Handler^ OnHandler;
           public: void __clrcall Runner(bool checkit)
           {
              if(&Objeks::OnHandler != nullptr) 
                OnHandler(checkit);
           }
       };
   }
}

我在很大程度上保留了默认的 VS 2010 C++/CLI 项目,我希望如果您遇到前向声明的麻烦,则使用命名空间 System; 也会出现在标题中:)

也许您不想使用事件? 但结构似乎很简单。

我在考虑后添加了错误检查 (使用谓词和数组编译 C++/CLI 委托调用时出错: :FindAll())。

This work's for me;

stdafx.h:

public delegate void Handler(bool isit);

cli1.cpp:

#include "stdafx.h"
using namespace System;

namespace MY {
   namespace Namespace
   {
       public ref class Objeks
       {
           public: Objeks() {}
           public: event Handler^ OnHandler;
           public: void __clrcall Runner(bool checkit)
           {
              if(&Objeks::OnHandler != nullptr) 
                OnHandler(checkit);
           }
       };
   }
}

I left the default VS 2010 C++/CLI project alone for the most part, I would expect that if your going through the trouble of forward declarations, the using namespace System; would go in the header's also :)

Maybe you did not want to use event? But it seems to simply the structure.

I added the error check after considering (Error Compiling C++/CLI Delegate call using Predicate with Array::FindAll()).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文