Ошибки при компиляции с версией gcc версии 4.8.5, но не 3.2.3: Слабые значения функций в 4.8.5? [Дубликат]

Действие и Func с lambda:

person p = new person();
Action<int, int> mydel = p.add;       /*(int a, int b) => { Console.WriteLine(a + b); };*/
Func<string, string> mydel1 = p.conc; /*(string s) => { return "hello" + s; };*/
mydel(2, 3);
string s1=  mydel1(" Akhil");
Console.WriteLine(s1);
Console.ReadLine();
142
задан Destructor 15 June 2016 в 14:13
поделиться

3 ответа

199
ответ дан 12 revs 16 August 2018 в 02:46
поделиться

x скрыт во время наследования. Вы можете показывать через:

template <typename T>
class derived : public base<T> {

public:
    using base<T>::x;             // added "using" statement
    int f() { return x; }
};
11
ответ дан chrisaycock 16 August 2018 в 02:46
поделиться

(Исходный ответ от 10 января 2011 г.)

Я думаю, что нашел ответ: Проблема GCC: использование члена базового класса, который зависит от аргумент шаблона . Ответ не определен для gcc.


Обновление: в ответ на комментарий mmichael из проекта N3337 стандарта C ++ 11:

14.6.2 Зависимые имена [temp.dep] [...] 3 В определении шаблона класса или класса, если базовый класс зависит от параметра-шаблона, область базового класса не рассматривается во время неквалифицированных поиск имени в точке определения шаблона или члена класса или во время создания шаблона или члена класса.

Является ли «потому что стандарт говорит так» считается ответом, я не знаю. Теперь мы можем спросить, почему стандарт указывает, что, как замечательный ответ Стив Джессоп и другие, ответ на этот последний вопрос довольно длинный и спорный. К сожалению, когда дело доходит до стандарта C ++, часто почти невозможно дать краткое и самодостаточное объяснение того, почему стандарт требует чего-то; это относится и к последнему вопросу.

11
ответ дан Community 16 August 2018 в 02:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: