В проекте CLI у меня есть функция, которая принимает объект^и должна знать, какой тип хранится в объекте. Мой код хорошо работает для классов, но как использовать его для структур?Как использовать typeid() для structs
using namespace System::Drawing;
void AddObject(Object^% o_Object)
{
Type^ i_Type = o_Object->GetType();
if (i_Type == String::typeid) // OK
{
... do something
return;
}
if (i_Type == Rectangle::typeid) // ERROR
{
... do something
return;
}
}
Компилятор говорит: ошибка C3083: «Прямоугольник»: символ слева в «::» должен быть типом.
Тогда я попробовал:
if (i_Type == typeid(Rectangle))
{
... do someting
return;
}
Теперь она говорит мне: ошибка C2446: '==': не преобразование из 'сопзЬ type_info' в 'System :: Type^
Тогда я пробовал:
if (typeid(o_Object) == typeid(Rectangle))
{
... do someting
return;
}
Теперь он говорит мне: ошибка C3185: 'TypeId': используется на управляемом типа 'System :: Object ^', используйте 'System :: Object^:: TypeId' вместо
Тогда я попробовал:
if (o_Object::typeid == typeid(Rectangle))
{
... do someting
return;
}
И он говорит мне: ошибка C2653: 'o_Object': не класс или пространство имен имя
Что я могу сделать?
Когда я использую VS2013 и весь ваш первый блок кода (с комментариями '... do something'), я не получаю ошибок. Убедитесь, что вы ссылаетесь на System.Drawing.dll и попробуйте использовать полное имя ('System :: Drawing :: Rectangle :: typeid') в строке if. –
Я полагаю, вы не #include в своем проекте. Я уже нашел причину. Смотри ниже. –
Elmue
Нет, я этого не делал. Я ожидал, что у вас есть какое-то столкновение с именами, но не был уверен, что это будет. –