Форум программистов, компьютерный форум CyberForum.ru

внук родительского класса не может работать с полями дедовского класса; почему? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа со стеком http://www.cyberforum.ru/cpp-beginners/thread313836.html
Используя стек, проверить, является ли содержимое текстового файла правильной записью формулы следущего вида: <формула>::=<цифра>|(<формула><знак><формула>) <знак>::=+|-|* <имя>::=x | y |z <цифра>::=0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 совсем не умею работать со стеком, поэтому очень надеюсь на вашу помощь.
C++ Подсчитать количество строк Доброго времени суток! Дано задание: В текстовом файле подсчитать количество строк, которые начинаются и оканчиваются одной и той же буквой,вывести эти строки и их количество в новый файл. Я написала код программы по образцу (тк сама только учусь программированию), но эта программа не работает... Подскажите пожалуйста какие ошибки я допустила и как лучше сделать. Заранее спасибо!) void... http://www.cyberforum.ru/cpp-beginners/thread313831.html
Нахождение в структуре одинаковых элементов C++
Задача довольно простая, не получается одна вещь - не знаю, чего то не до пру.. Сама задача: вводим структуру из 3 элементов Автор, книга, год - таких авторов с книгами тоже 3. Как только ввели ищем по названию книги Информатика - ищет, находит. Вопрос: как мне вывести если в структуре два автора которые написали книгу с названием информатика - если такие есть надо вывести обоих и сколько...
C++ Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted
Добрый день подскажите что это означает и как исправить данное сообщение Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted #include <iostream> #include <locale> #include <math.h> using namespace std; //double calc (double r1, double r2,int i) //{
C++ Разработать программу, которая выводит, например, на экран следующую таблицу из введенных данных http://www.cyberforum.ru/cpp-beginners/thread313759.html
Примерное задание Разработать программу, которая выводит, например, на экран следующую таблицу из введенных данных:
C++ Защита от дураков В функцию добавления, нужно добавить защиту от дураков: void Newadd() { Abbase z2; system ("cls"); cout <<"Abbase 0.51 final"<<endl; cout <<"\n"<<endl; fstream fout("base.txt", ios::app); cout <<"Табельный номер:\n-> "; подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
06.06.2011, 11:02     внук родительского класса не может работать с полями дедовского класса; почему?
Косяк действительно с областями видимости, using решает проблему:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Base {
 public:
  int field_;
};
 
template <class Tp_>
class One: public Base {
 public:
  void MethodOne() {
    field_ = 0;
 }
};
 
template <class Tp_>
class Two: public One<Tp_> {
 using Base::field_;
 
 public:
  void MethodTwo() {
    field_ = 0;  // ок
  }
};
Хм... За пределами класса все нормально видится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Base {
 public:
  int field;
};
 
template <class T>
class One: public Base {
};
 
template <class T>
class Two: public One<T> {
};
 
int main()
{
  Two<int> two;
  two.field = 100; // ок
}
Добавлено через 39 минут
Есть идея почему так происходит, но, естественно, я могу ошибаться.
Дело в том, что компилятор до инстанцирования vnuk не знает, что есть g, так как могут иметь место специализации sinn, в которых g может быть чем угодно - методом, именем типа, другим полем и т.д. Т.е. получается то, чем будет являтся g будет зависеть от аргумента шаблона, а к зависимым именам применяются другие правила поиска.

Добавлено через 26 минут
Похоже, ответ таится здесь:
Цитата Сообщение от C++98 14.6.2.3
In the definition of a class template or in the definition of a member of such a template that appears outside of the template definition, if a base class of this template depends on a template-parameter, the base class scope is not examined during name lookup until the class template is instantiated
Добавлено через 33 минуты
В стандарте C++03 пункт 14.6.2.3 имеет несколько другую формулировку, и говорит о том что unqualified имена не ищутся в базовых шаблонных классах ни при определении класса ни при его инстанцировании, что собственно наблюдается в данном случае.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru