搜尋

首頁  >  問答  >  主體

c++在派生类中使用基类函数的错误

#include <iostream>

class ZZ
{
public:
    void print()
    {
        std::cout << "hello\n";
    }
};

class YY : public ZZ
{
public:
    void print()
    {
        using ZZ::print;
        print();
    }
};

int main()
{
    YY temp;
    temp.print();
    getchar();
    return 0;
}

为什么上面的这段代码回报错?
error: 'ZZ' is not a namespace or unscoped enum using ZZ::print;

高洛峰高洛峰2772 天前400

全部回覆(4)我來回復

  • 巴扎黑

    巴扎黑2017-04-17 14:59:58

    因為你那個用法是錯的,這個用法是c++11新增的

    class YY : public ZZ
    {
    public:
        using ZZ::print;
    };

    你寫在成員函數裡面,那麼便成為了擴展一個成員函數的作用域,這當然不會成功。 。

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 14:59:58

    首先 main裡的temp沒初始化實例。 。 然後你子類別YY重載了父類別的方法。別寫USING,直接 ZZ::print();

    回覆
    0
  • 迷茫

    迷茫2017-04-17 14:59:58

    在衍生類別中使用基底類別的public函數,要嘛你就直接不重寫,要嘛你可以在衍生類別裡的print函數中使用ZZ::print()呼叫。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 14:59:58

    using寫錯地方了!不應該寫在成員函數內部!另外,兩個print函數同名,會出現無限遞歸,應該要為YY中的print重新取個名字!

    class YY : public ZZ
    {
    public:

    using ZZ::print;
    void YYprint()
    {
        print();
    }

    };

    回覆
    0
  • 取消回覆