Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151

Шаблоны: ошибки: requires template argument list или undeclared identifier

27.11.2017, 17:10. Показов 1628. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть маленький тестовый проект из 4-файлов.
Что мне надо - рассказывать словами замучаюсь, взляните пожалуйста на код по ссылке ниже (он с комментариями).
Если коротко, проблема в объявлении шаблонного класса , у которого tempate - тоже шаблонный класс, и есть некоторые нюансы, о которых ниже.

Мне нужно чтобы здесь не было ошибок:
- ClassInHeaderOnly<SourceEncoding> *headerOnly;
или
- 'SourceEncoding': undeclared identifier

Обязательное условие, в test1.h нельзя инклудить headeronly.h .
Инклудить headeronly.h можно только в test1.cpp.

Как объявить шаблонный класс ?
Или может по другому решить проблему с динамическим указателем?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.11.2017, 17:10
Ответы с готовыми решениями:

Ошибки: 1) use of class template requires template argument list 2) 'T' : undeclared identifier
Решил подправить свой класс с использованием шаблонов, но столкнулся со следующим косяком. Если я прописываю тело функций внутри описания...

'MyQueue' : use of class template requires template argument list
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки 'MyQueue' : use of class template...

Error: '>>' should be '>>' within a nested template argument list
кто знает че за ошибка, как с ней бороться? 000615.cpp: In function 'int main()':

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.11.2017, 17:14
Если SourceEncoding шаблон, то где ещё тип?
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
27.11.2017, 17:45  [ТС]
Если, напр. ClassInHeaderOnly<UTF8<>> , то SourceEncoding. - UTF8<>

Там же все есть, в гисте, ну , не можете сразу прикинуть что да как с этими шаблонами, воспроизведите этих маленьких четыре файла в своей IDE, зачем спрашивать все то, что самому можно посмотреть ???
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
27.11.2017, 17:56
Может, мне ещё сделать за тебя и сдать?
Если ты не указываешь конкретный тип для ClassInHeaderOnly, то TestClass должен быть шаблонным.
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
27.11.2017, 18:47  [ТС]
Че сдать? !! Тут не только дети бегают... А кое-кто для себя делает.
Просто, этот чтобы такой вопрос подготовить , куча времени уходит, а тут не успев до конца вникнуть начинают , а где, а что , получается нахер стараться вообще , и так не поймут....

быть шаблонным.
Например ?
SourceEncoding закинуть как template для TestClass?

Добавлено через 39 минут
Если так, то это придётся инклудить headeronly.h ещё куда-то, а это нельзя.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
27.11.2017, 18:55
Цитата Сообщение от FreakMurderer Посмотреть сообщение
то это придётся инклудить headeronly.h ещё куда-то, а это нельзя
Никуда от этого не денешься. Чтобы скомпилировать ClassInHeaderOnly *headerOnly нужно полностью параметризировать шаблон ClassInHeaderOnly.

Если это невозможно, делай
C++
1
void *headerOnly;
и потом такой указатель преобразовывай к чему захочешь
1
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
27.11.2017, 19:15  [ТС]
Во, что то уже конкретное, спасибо.
Но void *headerOnly; я уже делал, эта идея первая пришла ко мне в голову. Ещё я делал так:
C++
1
class Child : ClassInHeaderOnly<UTF8<>>{}
, наследовался, потом везде вставлял Child, и в TestClass и в test1.CPP. Тоже работало. Кстати какой вариант лучше - с приведением или наследованием ?

Гуру сайта, вариантов больше нет?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
27.11.2017, 19:19
Бесполезными будут оба...
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 151
28.11.2017, 13:24  [ТС]
Офигеть, а вставлять headeronly.h ещё куда-то лучше ? Это сколько лишнего инлайна за собой потянет? Да и вообще , его светить нежелательно.
Объяснитесь пожалуйста. .

Добавлено через 15 часов 17 минут
Ап!

Добавлено через 2 часа 44 минуты
Сделал и 3-й вариант:
Ежели в этом ошибка:
ClassInHeaderOnly<SourceEncoding> *headerOnly; ..... 'SourceEncoding': undeclared identifier , ну тут понятно от чего ошибка, я написал просто для видимости... (синтаксис абсолютно левый).

То можно присобачить с помощью forward declaration и также UTF8 как замену SourceEncoding вот так:

C++
1
2
template<typename CharType = char>
struct UTF8;
Таким образом полный рабочий код test1.h выглядит так (без лишних добавлений headeronly.h):
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifndef VELO_TEST1_H
#define VELO_TEST1_H
 
#include <stdio.h>
 
template<typename SourceEncoding>
class ClassInHeaderOnly;
 
class Worked;
 
template<typename CharType = char>
struct UTF8;
 
class TestClass {
public:
    TestClass();
    virtual ~TestClass();
    void printHeaderOnlyClass();
private:
    ClassInHeaderOnly<UTF8<>> *headerOnly;
    Worked *worked;
};
 
#endif
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2017, 13:24
Помогаю со студенческими работами здесь

Исправить ошибки Incompatible types и Undeclared identifier
Помогите,пожалуйста! Помогите исправить ошибки :) unit Unit1; interface uses Windows, Messages, SysUtils, Variants,...

Ошибки в Visual C++: error C2065: 'SetCursorPos' : undeclared identifier
Здрасьте. У меня такой вопрос: Вот код.(Пишу на Microsoft Visual Studio C++ 6.0 void main(){ for (int i=0; i&lt;20; i++) { ...

Ошибки Undeclared identifier: 'Edit1', Missing operator or semicolon
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; ...

Undeclared identifier или too many include files
У меня 4 фала .h и одна форма. Мне из этих фалов надо брать функции и переменные, действовать с ними в форме. Но мне так же надо брать...

Ошибка no instance of function template "Swap" matches the argument list
#include &quot;stdafx.h&quot; using namespace System; using namespace System::Collections::Generic; generic &lt;typename T&gt; void Swap(T...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru