托管和非托管代码错误 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
这些错误在xmemory0
和list
文件中?它们是什么?并且它只发生在障碍类中,其余的都很好。
这是代码的一部分
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<>
这样的 STL 容器中。
如果没有更多上下文,很难说下一步该做什么,但一种可能的解决方法是更改您的 SetupObstacles
方法:
void SetupObstacles(System::Collections::Generic::List<Cadet::Game::Entities::Obstacle>^ obstacles)
...
【讨论】:
【参考方案2】:你有一个指向Obstacle
的指针吗?
help on this error 表明某些类型(例如普通属性)不能有引用类型——你不能有指向它的指针。尝试改用^
。
【讨论】:
以上是关于托管和非托管代码错误 C3699的主要内容,如果未能解决你的问题,请参考以下文章