как избавиться от ошибки C3861:?

#c #templates

#c #шаблоны

Вопрос:

У меня есть класс, определенный на c . И у меня есть шаблон внутри его файла .h. И в этом шаблоне несколько локальных классов, определенных в файле .cxx.

содержимое файла.h

 namespace test
{
 Class a
 {
   template<classT>
   {
     abc  xyz = //some initialization
   }
 };
}
  

содержимое файла.cxx

 #include "a.h"
namespace test
{
   class abc 
   {
   };
}
  

когда я компилирую этот файл, он компилируется нормально. Но когда я пытаюсь использовать шаблон, который я определил в a.h . , он выдает мне следующую ошибку.

ошибка C3861: ‘abc’: идентификатор не найден

Комментарии:

1. Почему вы объявляете abc в.cxx? Вы должны поместить это в файл заголовка и загрузить его перед вашим шаблоном, который его использует.

2. Почему class abc находится в a.cxx , а не в заголовочном файле? И почему расширение файла такое cxx , не cpp ?

3. Вам нужно поместить большую стрелку, указывающую на строку кода во фрагменте, который не компилируется.

4. Этот код не будет компилироваться. Опубликуйте правильный код. Что такое template<classT> ?

Ответ №1:

Сделайте прямое объявление класса abc, например:

 namespace test
{

 class abc;

 class a
 {
   template<classT>
   {
     abc  xyz = //some initialization
   }
 };
}
  

Ответ №2:

Похоже, вы пропустили объявление class abc в файле .h.

И вы ставите Class a вместо class a .