Задать вопрос

Почему компилятор выдает error C2065 (ежедневная рубрика "Магия С++")?

Здравствуйте. Я новичок в C++. На работе ковыряюсь в чужом проекте. В файле есть два метода. В одном из них используется класс. Я хочу использовать этот класс в другом методе, на что компилятор выдает error C2065: undeclared identifier. Вот схематичное описание ситуации:
temlate<class Base>
class CLASS
{
   void visit()
   {
      // bla bla bla
      Device d;  // 'Device' : undeclared identifier
      //bla bla bla
   }
   void Draw()
   {
      // bla bla bla
      Device d;  // It's OK
      //bla bla bla
   }
};

Не могу понять почему это так. Пробовал менять методы местами, но ошибка остается, причем именно на ту же самую строку (в методе visit). Подскажите пожалуйста как это исправить. Заранее спасибо!

UPD:
Если закомментировать использование Device в методе visit, то все отлично работает (проект рабочий, я его просто допиливаю):
class CLASS
{
   void visit()
   {
      // bla bla bla
      // Device d;  // now it's OK
      //bla bla bla
   }
   void Draw()
   {
      // bla bla bla
      Device d;  // It's OK
      //bla bla bla
   }
};
  • Вопрос задан
  • 2957 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
@DancingOnWater
Методы шаблоны инстанцируются в момент их вызова. Отсюда если метод не вызывается, то он не компилируется.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Мне кажется, правильное название вашей рубрики -- "алло, мы ищем телепатов".
Ответ написан
Возможные варианты:

1. вы описались, когда писали Device;
2. вы забыли подключить/указать пространство имен (using namespace ...;);
3. вы забыли точку с запятой строчкой (или несколькими строчками) выше;
4. другая причина, о которой нам остается только гадать, из-за вашего "схематичного" изложения.
Ответ написан
EvgenijDv
@EvgenijDv
C/C++ programmer
В вашем схематичном описании нет ни слова про Device, если про него ничего нет и в вашем коде, то компилятор логично ругается :-)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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