2013-03-09 2 views
0

Я работаю над игрой, использующей C# и C++. Классы для моделей написаны на C#, а структура уровней хранится в файлах XML. Когда я хочу прочитать его на C++ и хочу построить проект, у меня есть эта странная ошибка, и я не знаю, где найти некоторые ошибки.Ошибка управляемого и неуправляемого кода C3699

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 файлов? что они? и это происходит только для класса Obstacle, остальные - в порядке.

Здесь часть кода

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

Показать код .. –

+0

который отчасти потому, что эти ошибки показывает в xmemory0 и список файлов не в некоторых файлах проекта –

+0

попробуйте построить, комментируя xmemory0, чтобы мы могли узнать источник проблемы – nsconnector

ответ

0

У вас есть указатель на Obstacle где-нибудь?

help on this error предполагает, что некоторые типы (такие как тривиальные свойства) не могут иметь ссылочный тип - у вас нет указателя на него. Вместо этого попробуйте использовать ^.

2

Похоже, что Cadet::Game::Entities::Obstacle - это управляемый класс (поскольку вы указали currentObstacle в качестве ссылки с ^). Если это так, вы не можете напрямую хранить управляемые объекты в контейнерах STL, например std::list<>.

Трудно сказать, что делать дальше без больше контекста, но одна из возможных решений было бы изменить SetupObstacles метод:

void SetupObstacles(System::Collections::Generic::List<Cadet::Game::Entities::Obstacle>^ obstacles) 
    { ... } 
Смежные вопросы