C ++ / CLI转发声明-相互依赖的类

时间:2018-07-20 15:58:17

标签: c++ c++-cli forward-declaration

我在C ++ / CLI库中定义和使用两个相互依赖的类时遇到麻烦。

基于此问题的答案: Visual C++ (C++/CLI) Forward Declaration with Derivative Classes?

我有这个: A.h

#pragma once
#include "B.h"

#ifdef B_H

namespace TestForwardDeclaration
{
    public ref class A
    {
    public:
        A()
        {
        }
        double Result;
        void Test(B ^b)
        {
            this->Result = b->Result;
        }
    };
}

#endif 

B.h

#define B_H

#pragma once

ref class A;
namespace TestForwardDeclaration
{
    public ref class B
    {
    public:
        B()
        {
        }
        double Result;
        void Test(A ^a)
        {
            this->Result = a->Result;
        }
    };
}

#include "A.h"

这可以编译,并且似乎具有我需要的功能,但是我无法在不同的文件(例如主DLL文件)中正确实现。如果我同时包含A.h,B.h或同时包含两者,则会收到错误消息“使用未定义的类型'A'。

我想念什么?

编辑

我还没有看到一个清晰完整的例子,说明在C ++中似乎很流行的问题(使用相互依赖的类),因此这是我的特定用例的解决方案:

A.h

#pragma once
#include "B.h"

#ifdef B_H

namespace TestForwardDeclaration
{
    public ref class A
    {
    public:
        A();
        double Result;
        void Test(B ^b);
    };
}

#endif 

B.h

#define B_H

#pragma once

namespace TestForwardDeclaration
{
    ref class A;

    public ref class B
    {
    public:
        B();
        double Result;
        void Test(A ^a);
    };
}

#include "A.h"

TestForwardDeclaration.cpp

// This is the main DLL file.

#include "stdafx.h"
#include "A.h"
#include "B.h"
namespace TestForwardDeclaration
{
    A::A()
    {
    }
    void A::Test(B ^b)
    {
        this->Result = b->Result;
    }
    B::B()
    {
    }
    void B::Test(A ^a)
    {
        this->Result = a->Result;
    }
}

0 个答案:

没有答案