2

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

这是我正在做的一个例子。注意:我已经删除了实际上不影响此问题的所有额外属性和方法。如何在不导致类重新定义和循环引用的情况下重做这些。如果可以,请将此示例用作正确布局报表的模板。

// 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;
}
4

1 回答 1

4

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

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;
    };
}

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

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

于 2013-09-30T16:57:32.927 回答