gpt4 book ai didi

CLI 类的 C++/CLI 循环引用问题

转载 作者:行者123 更新时间:2023-11-30 02:52:16 27 4
gpt4 key购买 nike

我遇到了两个相互引用的类的问题。我曾尝试使用接口(interface)来解决问题,但遇到了其他问题,例如类重新定义。我只是不确定如何正确执行此操作。

这是我正在做的事情的一个例子。注意:我已经去掉了所有实际上不影响这个问题的额外属性和方法。我怎样才能重做这些而不导致类重新定义并且没有循环引用。如果可以,请使用此示例作为正确布局语句的模板。

// componentClass.h
//#include "controlClass.h" - Would cause a circular reference
namespace test
{
//component class
public ref class componentClass sealed : Component
{
internal:
componentClass(controlClass ^control);
private:
controlClass ^_control;
};
}

// controlClass.h
#include "componentClass.h";
namespace test
{
//control class
public ref class controlClass: Control
{
public:
controlClass();
private:
componentClass ^_componentClass;
};
}

// controlClass.cpp
#include "controlClass.h"
controlClass::controlClass()
{
_componentClass = gcnew componentClass(this);
}

// componentClass.cpp
#include "componentClass.h"
componentClass::componentClass(controlClass ^control)
{
_control = control;
}

最佳答案

通常,解决此问题的最简单方法是将两个类声明放在一个头文件中,并转发声明第二个。例如:

namespace test
{
// Forward declaration of controlClass
ref class controlClass;

//component class
public ref class componentClass sealed : Component
{
internal:
componentClass(controlClass ^control);
private:
controlClass ^_control;
};

//control class
public ref class controlClass: Control
{
public:
controlClass();
private:
componentClass ^_componentClass;
};
}

可以使用多个头文件来完成此操作,但是使用单个头文件可以消除一些注意事项和复杂性。

您可以继续在不同的源文件中提供每个类的实现而不会出现问题。

关于CLI 类的 C++/CLI 循环引用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099654/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com