【问题标题】:Why is a qualified, forward declared, native class's name resolving to a different, managed class name in C++/CLI?为什么在 C++/CLI 中限定的、前向声明的本地类名称解析为不同的托管类名称?
【发布时间】:2013-04-15 04:51:00
【问题描述】:

我在 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”上使用此间接

【问题讨论】:

    标签: c++ visual-studio-2010 c++-cli wrapper


    【解决方案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

    【讨论】:

    • 我的项目似乎出了点问题——从头开始重新创建项目似乎已经解决了这个问题。不知道怎么做。不过你是对的,在我重新创建项目后,VS2010 似乎也没有问题。
    猜你喜欢
    • 2023-03-24
    • 2016-02-23
    • 2012-02-17
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多