托管和非托管代码错误 C3699

Posted

技术标签:

【中文标题】托管和非托管代码错误 C3699【英文标题】:Managed and unmanaged code error C3699 【发布时间】:2013-03-09 18:08:48 【问题描述】:

我正在开发一款使用 C# 和 C++ 的游戏。模型的类是用 C# 编写的,层次结构存储在 XML 文件中。当我想用 C++ 阅读它并想构建项目时,我遇到了这个奇怪的错误,而且我不知道在哪里可以找到一些错误。

Error   1   error C3699: '*' : cannot use this indirection on type 'Cadet::XMLReader::Models::Obstacle' C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xmemory0 527 1   Cadet.Game

这些错误在xmemory0list 文件中?它们是什么?并且它只发生在障碍类中,其余的都很好。

这是代码的一部分

    void SetupObstacles(std::list<Cadet::Game::Entities::Obstacle>  &obstacles)
    
     int size = CurrentLevel->Obstacles->Length;
     Cadet::XMLReader::Models::Obstacle^ currentObstacle;
  

【问题讨论】:

这部分是因为这些错误显示在 xmemory0 中并列出了不在项目的某些文件中的文件 尝试通过注释 xmemory0 来构建,以便我们知道问题的根源 @nsconnector 怎么做? 你检查过这个链接吗?它可能对你有帮助social.msdn.microsoft.com/Forums/en/vclanguage/thread/… 如果您评论以下行,它会生成吗? Cadet::XMLReader::Models::Obstacle^ currentObstacle; 【参考方案1】:

看起来Cadet::Game::Entities::Obstacle 是一个托管类(因为您已将currentObstacle 声明为^ 的引用)。如果是这种情况,您不能直接将托管对象存储在像std::list&lt;&gt; 这样的 STL 容器中。

如果没有更多上下文,很难说下一步该做什么,但一种可能的解决方法是更改​​您的 SetupObstacles 方法:

void SetupObstacles(System::Collections::Generic::List<Cadet::Game::Entities::Obstacle>^ obstacles)
     ... 

【讨论】:

【参考方案2】:

你有一个指向Obstacle的指针吗?

help on this error 表明某些类型(例如普通属性)不能有引用类型——你不能有指向它的指针。尝试改用^

【讨论】:

以上是关于托管和非托管代码错误 C3699的主要内容,如果未能解决你的问题,请参考以下文章

托管代码和非托管代码

在托管代码和非托管代码之间传递非托管结构的安全数组

托管和非托管代码是啥意思? [复制]

托管代码和非托管代码的区别

托管代码和非托管代码的区别

托管库和非托管库之间有啥区别?