#c #static-members
#c #статические члены
Вопрос:
Я все еще изучаю шаблоны C и столкнулся с проблемой, связанной с вызовом членов из специализированных статических функций, используя следующее. GCC жалуется: «недопустимое использование члена C< const char* >::value в статической функции-члене».Я искал этот форум и несколько других, и даже мой друг Google не может мне помочь. Я полагаю, что ошибка должна быть чем-то, что я упускаю из виду, поскольку я создал неспециализированную версию класса (с той же статической функцией-членом), и я все равно получаю ту же ошибку. Есть идеи?
template <typename T = const char*>
class C { };
//specialization for const char*
template <>
class C <const char*> {
public:
C() { }
static void echo(int x);
private:
int value;
};
//error occurs here
void C<const char*>::echo(int x) {
value = x;
}
Большое спасибо за любую информацию, которую вы можете предложить.
Ответ №1:
Это не имеет ничего общего с шаблонами.
value
является членом экземпляра и может быть доступен только при предоставлении экземпляра C
. У статической функции нет this
экземпляра, и вы также не использовали .
->
оператор доступа к элементу or для явного предоставления экземпляра.
Ответ №2:
echo()
Является статическим, поэтому не может получить доступ к полю уровня экземпляра value
.
Либо сделайте функцию нестатической, либо сделайте поле статическим.
Комментарии:
1. Точнее, он не может получить доступ к элементу экземпляра, используя неквалифицированное имя.