Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 134
1

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

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

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

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

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

Как объявить шаблонный класс ?
Или может по другому решить проблему с динамическим указателем?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
Написал код про шаблоны. Не могу понять почему выводит ошибку во время наследования класса. ошибки...

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

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

8
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
27.11.2017, 17:14 2
Если SourceEncoding шаблон, то где ещё тип?
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 134
27.11.2017, 17:45  [ТС] 3
Если, напр. ClassInHeaderOnly<UTF8<>> , то SourceEncoding. - UTF8<>

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

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

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

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

Гуру сайта, вариантов больше нет?
0
зомбяк
1556 / 1195 / 339
Регистрация: 14.05.2017
Сообщений: 3,882
27.11.2017, 19:19 8
Бесполезными будут оба...
0
-3 / 16 / 2
Регистрация: 21.11.2013
Сообщений: 134
28.11.2017, 13:24  [ТС] 9
Офигеть, а вставлять 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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.11.2017, 13:24

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

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

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; ...

Ошибки типа "Undeclared identifier" и expected
Выдает ошибки: Unit1.pas(33): Undeclared identifier: 'Memol' Unit1.pas(37): ';' expected but...

Ошибки "Undeclared identifier" в программе
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru