#cpp
Здравствуйте. У меня есть следующий код а-ля HelloWrold: #includeusing namespace std; class A { public : void eat ()const { cout << "inside eat" << endl; }; }; class B : private A { public : using A::eat; }; int main() { B b(); // {1} B b; // {2} b.eat(); return 0; } Собственно вопрос: если закомментировать строку {1} и раскомментировать строку {2} то все компилируется. А если наоборот закомментировать строку {2} и раскомментировать строку {1} то выдается сообщение об ошибке "request for member 'eat' in 'b', which is of non-class type 'B ()()" В чем же причина такого поведения компилятора? Заранее спасибо
Ответы
Ответ 1
Потому, что B b(); это не определение переменной, а определение функции b без аргументов, которая возвращает B. Проверить это легко - добавьте в класс B конструктор по умолчанию, который выводит в лог/консоль. #includeusing namespace std; class B { public : B() { cout << "bbb" << endl; } }; int main() { B b(); return 0; } В логе будет пустота. Детали можно почитать в стандарте в пунктах 6.8 и 8.2
Комментариев нет:
Отправить комментарий