【发布时间】:2015-06-26 00:57:08
【问题描述】:
此代码已编译。
struct A
{
const int *getX() const
{
return &x;
}
int *getX()
{
const A *thisConst = this;
return const_cast<int *>(thisConst->getX());
}
void f()
{
int *p = getX();
}
int x;
};
但这段代码没有。
struct I
{
virtual const int *getX() const = 0;
int *getX()
{
const I *thisConst = this;
return const_cast<int *>(thisConst->getX());
}
};
struct A : I
{
virtual const int *getX() const
{
return &x;
}
void f()
{
int *p = getX();
}
int x;
};
'const_cast' : 无法从 'const int *' 转换为 'int *'
我知道,如果我给出不同的名称,它将被编译。但是有没有不重命名函数的方法?
【问题讨论】:
-
您的标题似乎与您的问题不一样...您可以更改两者之一以避免混淆吗?另外,您到底想在这里实现什么?
-
我想在不重命名getX的情况下编译这段代码。
标签: c++ inheritance overloading virtual-functions