0
4

2 に答える 2

1

Either:

class Derived : public Base {
public:
    using Base::getTwo; // Add this line
    int getValue() {
        // no matching function for call to ‘Derived::getTwo()’
        return getTwo();
    }
    int getTwo(int) {
        return 2;
    }
}

Or

        return Base::getTwo();
于 2012-07-14T00:32:52.740 に答える
0

これは、C++ での名前検索のしくみです。

namespace N1
{
    int getTwo();
    int getTwo(int, int);

    namespace N2
    {
        int getTwo(int);

        namespace N3
        {
            call getTwo(something char*);
        }
    }
}

現在のコンテキストは N3 です。getTwoこのレイヤーにはありません。よし、上層へ。N2 には の定義が 1 つ含まれていgetTwoます。コンパイラはこの定義を使用しようとし、上位コンテキストを検索しません。getTwofrom N2 はgetTwo、すべての上位層のすべての定義を非表示にします。これにより、オーバーロードされたメソッドとの混乱が生じることがあります。

を追加するusing Base::getTwo;と、実際には内部コンテキストに定義プロキシが追加されます。上位コンテキスト アイテムの定義は表示されません。ただし、プロキシは表示されます。

于 2012-07-14T01:00:43.277 に答える