Наследование, (Почему ошибка компилатора?)
От: raskolnikov  
Дата: 14.10.04 09:38
Оценка:
Добрыи день,

Последняя строка в коде ведет к ошибке компилятора <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);
}
Re: Наследование, (Почему ошибка компилатора?)
От: Bell Россия  
Дата: 14.10.04 09:51
Оценка: 2 (1)
Здравствуйте, 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;
   }
};
Любите книгу — источник знаний (с) М.Горький
Re[2]: Наследование, (Почему ошибка компилатора?)
От: Bell Россия  
Дата: 14.10.04 09:52
Оценка:
Здравствуйте, Bell, Вы писали:


B>Потому что A_A::foo1(int) скрывает A::foo1(const char*).

Ошибся: правильнро так:
Потому что A_A::foo1(const char*) скрывает A::foo1(int).
Любите книгу — источник знаний (с) М.Горький
Re: Наследование, (Почему ошибка компилатора?)
От: Andrew S Россия http://alchemy-lab.com
Дата: 14.10.04 10:02
Оценка: 2 (1)
R>Добрыи день,

R>Последняя строка в коде ведет к ошибке компилятора <error: invalid conversion from `int' to `const

R> char*'>.
R>Не подскажете почему, и к какои области (глава у строуструпа) ета проблема относится?

Метод у класса наследника перекрывает все одноименные методы родителя (разрешение перегрузки не пересекает границ областей видимости классов 15.2.2). Используйте using.
http://www.rusyaz.ru/pr — стараемся писАть по-русски
Re[2]: Наследование, (Почему ошибка компилатора?)
От: Vamp Россия  
Дата: 14.10.04 10:02
Оценка:
О чем компилятор, если я не ошибаюсь, выдает ворнинг.
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Наследование, (Почему ошибка компилатора?)
От: Bell Россия  
Дата: 14.10.04 10:19
Оценка:
Здравствуйте, Vamp, Вы писали:

V>О чем компилятор, если я не ошибаюсь, выдает ворнинг.

Comeau в данном случае промолчал.
Любите книгу — источник знаний (с) М.Горький
Re[2]: Наследование, (Почему ошибка компилатора?)
От: Bell Россия  
Дата: 14.10.04 11:35
Оценка:
Здравствуйте, Andrew S, Вы писали:


AS>Метод у класса наследника перекрывает все одноименные методы родителя (разрешение перегрузки не пересекает границ областей видимости классов 15.2.2). Используйте using.


Не перекрывает, а скрывает
Любите книгу — источник знаний (с) М.Горький
Re[2]: Наследование, (Почему ошибка компилатора?)
От: raskolnikov  
Дата: 14.10.04 11:37
Оценка:
Spasibo bol'shoe sa glavu Stroustrup'a!

Здравствуйте, Andrew S, Вы писали:

R>>Добрыи день,


R>>Последняя строка в коде ведет к ошибке компилятора <error: invalid conversion from `int' to `const

R>> char*'>.
R>>Не подскажете почему, и к какои области (глава у строуструпа) ета проблема относится?

AS>Метод у класса наследника перекрывает все одноименные методы родителя (разрешение перегрузки не пересекает границ областей видимости классов 15.2.2). Используйте using.
Re[4]: Наследование, (Почему ошибка компилатора?)
От: raskolnikov  
Дата: 14.10.04 11:55
Оценка:
V>>О чем компилятор, если я не ошибаюсь, выдает ворнинг.
B>Comeau в данном случае промолчал.

V GCC 3.3.1 eto oshibka
Re[2]: Наследование, (Почему ошибка компилатора?)
От: raskolnikov  
Дата: 14.10.04 11:55
Оценка:
Spasibo.

Здравствуйте, 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>
B>class A_A : public A{
B> public:
B>   using A::foo1;
B>   void foo1(const char * s){
B>      cout << "A_A: "<<s<<endl;
B>   }
B>};
B>
Re[5]: Наследование, (Почему ошибка компилатора?)
От: Bell Россия  
Дата: 14.10.04 12:00
Оценка:
Здравствуйте, raskolnikov, Вы писали:


V>>>О чем компилятор, если я не ошибаюсь, выдает ворнинг.

B>>Comeau в данном случае промолчал.

R>V GCC 3.3.1 eto oshibka

Я имел ввиду, что нет ворнинга. А ошибка есть.
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.