Последняя строка в коде ведет к ошибке компилятора <error: invalid conversion from `int' to `const
char*'>.
Не подскажете почему, и к какои области (глава у строуструпа) ета проблема относится?
Спасибо заранее.
+++++++++++ Code ++++++++++++++
#include <iostream>
using namespace std;
class A{
public:
virtual void foo1(const char * s){
cout << s<<endl;
}
void foo1(int i){
static char buf[10]="";
sprintf(buf, "%d",i);
foo1( buf );
}
};
class A_A : public A{
public:
void foo1(const char * s){
cout << "A_A: "<<s<<endl;
}
};
int main(){
A a;
A_A a_a;
a_a.foo1("Hello World");
// Pochemu nizhnaja stroka vedjet k oshibke compilera?
// ved' foo1(int) unasledovana ot A?
//a_a.foo1(2);
}
Здравствуйте, raskolnikov, Вы писали:
R>Добрыи день,
R>Последняя строка в коде ведет к ошибке компилятора <error: invalid conversion from `int' to `const R> char*'>. R>Не подскажете почему, и к какои области (глава у строуструпа) ета проблема относится?
Потому что A_A::foo1(int) скрывает A::foo1(const char*). Тема — сокрытие имен.
Лечить так:
class A_A : public A{
public:
using A::foo1;void foo1(const char * s){
cout << "A_A: "<<s<<endl;
}
};
R>Добрыи день,
R>Последняя строка в коде ведет к ошибке компилятора <error: invalid conversion from `int' to `const R> char*'>. R>Не подскажете почему, и к какои области (глава у строуструпа) ета проблема относится?
Метод у класса наследника перекрывает все одноименные методы родителя (разрешение перегрузки не пересекает границ областей видимости классов 15.2.2). Используйте using.
AS>Метод у класса наследника перекрывает все одноименные методы родителя (разрешение перегрузки не пересекает границ областей видимости классов 15.2.2). Используйте using.
Здравствуйте, Andrew S, Вы писали:
R>>Добрыи день,
R>>Последняя строка в коде ведет к ошибке компилятора <error: invalid conversion from `int' to `const R>> char*'>. R>>Не подскажете почему, и к какои области (глава у строуструпа) ета проблема относится?
AS>Метод у класса наследника перекрывает все одноименные методы родителя (разрешение перегрузки не пересекает границ областей видимости классов 15.2.2). Используйте using.
Здравствуйте, Bell, Вы писали:
B>Здравствуйте, raskolnikov, Вы писали:
R>>Добрыи день,
R>>Последняя строка в коде ведет к ошибке компилятора <error: invalid conversion from `int' to `const R>> char*'>. R>>Не подскажете почему, и к какои области (глава у строуструпа) ета проблема относится?
B>Потому что A_A::foo1(int) скрывает A::foo1(const char*). Тема — сокрытие имен. B>Лечить так:
B>
V>>>О чем компилятор, если я не ошибаюсь, выдает ворнинг. B>>Comeau в данном случае промолчал.
R>V GCC 3.3.1 eto oshibka
Я имел ввиду, что нет ворнинга. А ошибка есть.