在CLI项目中,我有一个函数,它接受对象^,并且必须知道哪种类型存储在对象中。我的代码适用于类,但如何将其用于结构?
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;
}
}编译器说: error C3083:‘矩形’:符号位于'::‘必须是一个类型。
然后我试着:
if (i_Type == typeid(Rectangle))
{
... do someting
return;
}现在它告诉我: error C2446:'==‘:没有从'const type_info’到'System::Type ^‘的转换。
然后我试着:
if (typeid(o_Object) == typeid(Rectangle))
{
... do someting
return;
}现在它告诉我:错误C3185:‘type it’:用于托管类型'System::Object ^',而使用'System::Object ^::typeid‘
然后我试着:
if (o_Object::typeid == typeid(Rectangle))
{
... do someting
return;
}它告诉我: error C2653:'o_Object‘:不是类或名称空间名称
我能做些什么?
发布于 2015-02-16 17:02:44
我找到了原因:
编译器不接受所编写的系统::绘图::矩形APTHOUGH:
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;
}来解决歧义。
如果类名是从类或结构中提取的,那么它就没有什么可做的了。
https://stackoverflow.com/questions/28546173
复制相似问题