托管和非托管代码错误C3699

时间:2013-03-09 18:08:49

标签: c# c++ unmanaged managed

我正在开发一款使用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个文件中?它们是什么?它只发生在Obstacle类中,其余的都很好。

这是代码的一部分

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

2 个答案:

答案 0 :(得分:2)

看起来Cadet::Game::Entities::Obstacle是托管类(因为您已将currentObstacle声明为^的引用)。如果是这种情况,则无法直接将托管对象存储在STL容器中,如std::list<>

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

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

答案 1 :(得分:0)

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

help on this error表明某些类型(例如普通属性)不能具有引用类型 - 您不能指向它。请尝试使用^