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
ます。コンパイラはこの定義を使用しようとし、上位コンテキストを検索しません。getTwo
from N2 はgetTwo
、すべての上位層のすべての定義を非表示にします。これにより、オーバーロードされたメソッドとの混乱が生じることがあります。
を追加するusing Base::getTwo;
と、実際には内部コンテキストに定義プロキシが追加されます。上位コンテキスト アイテムの定義は表示されません。ただし、プロキシは表示されます。
于 2012-07-14T01:00:43.277 に答える