0

C++ のネイティブ クラスと C++/CLI のマネージド クラスがあります。C++/CLI は C++ のラッパーです。どちらのクラスも同じ名前ですが、異なる名前空間に存在します。まだ把握していない何らかの理由で、マネージ クラスへのポインターを宣言しようとするとコンパイラ エラーが発生しますが、実際には、私のコードは完全修飾名を使用してネイティブ クラスへのポインターを宣言しようとしています。何を与える?

"Native\Header.h"

namespace Native
{
    class MyClass {};
}

「マネージ/Header.h」

namespace Native { class MyClass; }
// Or
class Native::MyClass;

namespace Managed
{
    ref class MyClass
    {
        Native::MyClass* m_Native; // Error C3699
    };
}

エラー C3699: '*': 型 'Managed::MyClass' でこの間接参照を使用することはできません

4

1 に答える 1

1

Visual Studio 2012 C++ コンパイラは、そのコードを問題なく受け入れます。

アップグレードする必要がある場合があります。

実際、Visual Studio 2010 C++ コンパイラも同様です。

Service Pack がインストールされていることを確認してください。でテストしました

Microsoft (R) C/C++ 最適化コンパイラ バージョン 16.00.40219.01

正確なコードは

// C3699test.cpp : main project file.
// 

namespace Native { class MyClass; }

namespace Managed
{
    ref class MyClass
    {
        Native::MyClass* m_Native; // Error C3699
    };
}

コンパイルコマンドラインは

cl /c /AI"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0" /Zi /clr /nologo- /W3 /WX- /Od /Oy- /D WIN32 /D _DEBUG /D _UNICODE /D UNICODE /EHa /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fo"Debug\" /Fd"Debug\vc100.pdb" /TP /FU"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0\System.Core.dll" /analyze- /errorReport:prompt c3699test.cpp /clr:nostdlib

于 2013-04-06T03:03:08.803 に答える