0
//MyWrapper.h
#include "arithmetic.h"
#include "mathematics.h"
namespace MyWrapper {
public ref class ClassA
{
public:
ClassA();
~ClassA();
int add(int, int);
private:
MyEngine::Arithmetic *nativeClassA;
}
public ref class ClassB
{
public:
ClassB(ClassA^ arith);
~ClassB();
int pow(int, int);
private:
MyEngine::Mathematics *nativeClassB;
}
}
//MyWrapper.cpp
#include "MyWrapper.h"
My::ClassA::ClassA()
{
nativeClassA = new MyEngine::Arithmetic();
}
My::ClassA::~ClassA()
{
delete nativeClassA;
}
int My::ClassA::add(int a, int b)
{
return nativeClassA->add(a, b);
}
My::ClassB::ClassB(ClassA^ classA)
{
nativeClassB = new MyEngine::Mathematics(classA->nativeClassA); //***Error***
}
My::ClassB::~ClassB()
{
delete nativeClassB;
}
int My::ClassB::pow(int a, int b)
{
int result = nativeClassB->pow(a, b);
return result;
}
ここで、数学のクラスは算術クラスで初期化する必要があります。 しかし、nativeClassAはClassAのプライベート変数です。 したがってnativeClassB = new MyEngine::Mathematics(classA->nativeClassA);
、コンパイルエラーが発生します。C++/CLIマネージクラスでプライベート変数にアクセスする方法
そこで、nativeClassAをpublicに変更しました。
しかし、その時点で、nativeClassAはc#にエクスポートされます。 nativeClassA変数をc#にエクスポートしたくありません。
どうすれば修正できますか? アドバイスありがとうございます。
内部:MyEngine :: Arithmetic * nativeClassA; – KDEV
ありがとう、それは正常に動作します。 – KDEV
C++/CLIのドキュメントは次のとおりです。https://msdn.microsoft.com/en-us/library/ke3a209d.aspx#BKMK_Member_visibility –