.net 转换旧的托管-C++;新C+项目+/CLI
我有一个用旧语法编写的旧项目。它在VS2012中运行得很好,但我看到在VS2015/clr中:oldSyntax不再可用,正如我所期望的,我有很多错误。 我设法摆脱了其中一些,但现在我在以下代码行中受阻:.net 转换旧的托管-C++;新C+项目+/CLI,.net,visual-c++,c++-cli,clr,managed-c++,.net,Visual C++,C++ Cli,Clr,Managed C++,我有一个用旧语法编写的旧项目。它在VS2012中运行得很好,但我看到在VS2015/clr中:oldSyntax不再可用,正如我所期望的,我有很多错误。 我设法摆脱了其中一些,但现在我在以下代码行中受阻: ref class myColumnItemSorterClass : public IComparer { int IComparer::Compare(Object^ x, Object^ y) { if (x &&a
ref class myColumnItemSorterClass : public IComparer
{
int IComparer::Compare(Object^ x, Object^ y)
{
if (x && y) {
ColumnItemType^ pSSx = dynamic_cast<ColumnItemType^>(x);
ColumnItemType^ pSSy = dynamic_cast<ColumnItemType^>(y);
if (pSSx->Position&&pSSx->Position->Length>0 &&
pSSy->Position&&pSSy->Position->Length>0) {
int xPos = Convert::ToInt32(pSSx->Position);
int yPos = Convert::ToInt32(pSSy->Position);
if (xPos < yPos) {
return -1;
} else if (xPos > yPos) {
return 1;
} else {
return 0;
}
} else {
return 0;
}
} else {
return 0;
}
}
};
ref class MyColumnItemSortrClass:公共IComparer
{
int IComparer::比较(对象^x,对象^y)
{
if(x&y){
ColumnItemType ^pSSx=动态转换(x);
ColumnItemType ^pSSy=动态转换(y);
如果(pSSx->Position&&pSSx->Position->Length>0&&
pSSy->Position&&pSSy->Position->Length>0){
intxpos=Convert::ToInt32(pSSx->Position);
int yPos=Convert::ToInt32(pSSy->Position);
如果(xPosYPO){
返回1;
}否则{
返回0;
}
}否则{
返回0;
}
}否则{
返回0;
}
}
};
有两个错误:
知道如何修复它们吗?重写的接口方法必须是
虚拟的
和公共的
,并且可以是密封的
,以防止派生类重新实现该方法
不要使用接口名称限定方法(例如:IComparer::Compare
)。编译器将此解释为定义显式重写的尝试失败(请参阅编译器错误)
如果希望重写的方法只能通过接口句柄访问,则可以使用。重写的方法必须仍然是虚拟的
,但可以是私有的
,并且应该是密封的
ref class myColumnItemSorterClass : IComparer
{
private:
virtual int CompareExplicit(Object^ x, Object^ y) sealed = IComparer::Compare
{
/*...*/
return 0;
}
};
谢谢你的回答!
ref class myColumnItemSorterClass : IComparer
{
private:
virtual int CompareExplicit(Object^ x, Object^ y) sealed = IComparer::Compare
{
/*...*/
return 0;
}
};