为何不进行汇编呢?
错误C2660:具体::写行:函数不带1个参数
我知道如果我加上这一行:
//使用摘要库::写行;
它很管用,但我不明白为什么。
#include "iostream"
class AbstractBase
{
public:
virtual void WriteLine() = 0;
virtual void WriteLine( int i )
{
std::cout<<"AbstractBase"<<std::endl;
}
};
class Concrete : public AbstractBase
{
public:
//using AbstractBase::WriteLine;
virtual void WriteLine()
{
std::cout<<"Concrete Sub Class"<<std::endl;
}
};
int main()
{
Concrete ff;
ff.WriteLine();
ff.WriteLine(1);
return 0;
}有人能解释一下这里发生了什么吗。谢谢
是否有人知道此行为是否是C++标准中定义的行为。在C++标准中提到过吗?还是仅仅是一种编译器行为?
发布于 2012-06-18 15:42:31
一旦您声明一个函数:
void WriteLine()在派生类中,隐藏具有相同名称的所有基类函数的。
上面的函数不接受任何参数,它隐藏了同名的函数,并且接受一个参数,因为编译器找不到一个参数的函数,它会报告一个错误。
这句话:
using AbstractBase::WriteLine;启用(引入作用域)派生类中基类中的所有隐藏名称,因此可以使用一个参数的函数。
读得好:
什么意思,警告:派生::F(字符)隐藏基::F(双)?
发布于 2012-06-18 15:42:04
方法隐藏。基类中的另一个函数被同名的函数隐藏,尽管它有不同的签名。
要解决这个问题,可以使用using指令:
using AbstractBase::WriteLine;在派生类中:
class Concrete : public AbstractBase
{
public:
using AbstractBase::WriteLine;
//using AbstractBase::WriteLine;
virtual void WriteLine()
{
std::cout<<"Concrete Sub Class"<<std::endl;
}
};发布于 2012-06-18 15:42:14
在派生类中声明函数将隐藏基类中同名的所有函数--它们不被视为派生类函数的潜在重载。
添加using声明将隐藏函数带回到派生类的范围,它们与派生类函数一起被视为潜在的重载。
https://stackoverflow.com/questions/11086238
复制相似问题