在CLI项目中,我有一个带有Object ^的函数,并且必须知道Object中存储了哪种类型。我的代码适用于类,但如何将它用于结构?
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:'矩形&#39 ;:' ::'左边的符号必须是一种类型。
然后我尝试了:
if (i_Type == typeid(Rectangle))
{
... do someting
return;
}
现在它告诉我: 错误C2446:' ==' :没有来自' const type_info'到'系统::类型^'
然后我尝试了:
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' :不是类或命名空间名称
我该怎么办?
答案 0 :(得分:0)
我找到了原因:
编译器不会使用System :: Drawing :: Rectangle你写的:
using namespace System::Drawing;
在顶部。 编译器采用函数
WINGDIAPI BOOL WINAPI Rectangle(__in HDC hdc, __in int left, __in int top, __in int right, __in int bottom);
而是在WinGdi.h中定义。
我必须补充:
#using <system.drawing.dll>
在顶部
并且另外写:
if (i_Type == System::Drawing::Rectangle::typeid)
{
... do someting
return;
}
解决歧义。
如果我最初认为的是从类或结构中取出的,那么它无关。