0

我在 C++ 中有一个本机类,在 C++/CLI 中有一个托管类。C++/CLI 是 C++ 的包装器。这两个类具有相同的名称,但存在于不同的命名空间中。出于某种我还没有理解的原因,我收到有关尝试声明指向托管类的指针的编译器错误,但我的代码实际上是在尝试使用完全限定名称声明指向本机类的指针。是什么赋予了?

“本机\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++ 编译器也是如此。

确保您已安装服务包;我用

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 回答