Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11

Функция возвращающая обьект шаблонного класса

02.05.2020, 19:20. Показов 1959. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Столкнулся с такой проблемой:
Имеется два класса, Line и Circle. Оба наследуются от класса Point, все три шаблонные. Класс Circle имеет следующий вид:
C++
1
2
3
4
5
6
template<class A>
class Circle :public Point<A>{
public:
Line<A> get_Line();
private:
Line length;
Вот реализация функции get_Line(), она вынесена в другой хедер, включенный в хедер с определением класса. Однако при попытке скомпилироваться выскакивает набор ошибок. Подскажите пожалуйста в чем косяк.

C++
1
2
3
4
5
template<class E>
Line<E> Circle<E>::get_Line()
{
    return length;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.05.2020, 19:20
Ответы с готовыми решениями:

Функция шаблонного класса возвращающая тип, определенный классом
ошибка. говорит, что не ожидал увидеть идентификатор some(C2061)template&lt;typename T&gt; class a{ public: enum some{one,two}; some...

Как корректно передать в метод шаблонного класса объект шаблонного класса в качестве параметра?
header.h template &lt;class T&gt; class MyVector { public: void swap(MyVector&lt;T&gt;Vector); } template &lt;class T&gt; void...

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих функций с различными параметрами. Для...

19
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.05.2020, 19:26
Цитата Сообщение от NBS2k Посмотреть сообщение
Вот реализация функции get_Line(), она вынесена в другой хедер, включенный в хедер с определением класса. Однако при попытке скомпилироваться выскакивает набор ошибок. Подскажите пожалуйста в чем косяк.
Перенеси её в тот же хёдер, что и класс Circle
Цитата Сообщение от NBS2k Посмотреть сообщение
private:
Line length;
Line<A> length;

Добавлено через 1 минуту
C++
1
2
3
4
5
template<class E>
const Line<E> &Circle<E>::get_Line() const
{
    return length;
}
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11
02.05.2020, 19:28  [ТС]
А какая разница, если я через #include подключаю хедер с реализацией, в хедер с объявлением, подскажите пожалуйста?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.05.2020, 19:31
Цитата Сообщение от NBS2k Посмотреть сообщение
А какая разница, если я через #include подключаю хедер с реализацией, в хедер с объявлением, подскажите пожалуйста?
Инклуд делается до определения класса, а реализация должна быть после
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11
02.05.2020, 19:32  [ТС]
эм, необязательно, #include можно ставить и после обьявления (собственно как я и сделал
)
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.05.2020, 19:34
Цитата Сообщение от NBS2k Посмотреть сообщение
эм, необязательно, #include можно ставить и после обьявления (собственно как я и сделал
Не надо так делать.
Покажи-ка все свои файлы
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
02.05.2020, 19:37
Цитата Сообщение от NBS2k Посмотреть сообщение
Однако при попытке скомпилироваться выскакивает набор ошибок.
Каких ошибок? Где этот "набор ошибок" в вашем вопросе?
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11
02.05.2020, 19:38  [ТС]
//Circle.h
C++
1
2
3
4
5
6
7
8
9
10
#include"Point.h"
#pragma once
template<class A>
class Circle :public Point<A>{
public:
  Line<A>& get_Line() ;
private:
  Line<A> length;
};
#include "circle_doing.h"
//circle_doing.h
C++
1
2
3
4
5
template<class E>
Line<E> Circle<E>::get_Line()
{
    return length;
}
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
02.05.2020, 19:40
Цитата Сообщение от NBS2k Посмотреть сообщение
C++
1
2
3
4
Line<A>& get_Line()const ;
...
template<class E>
Line<E> Circle<E>::get_Line()
Какое отношение первое имеет ко второму? Это разные функции. В объявлении const, а в определении нет. В объявлении возвращается ссылка, а в определении - копия.

Почему до сих пор не приведены точные цитаты сообщений об ошибках?
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11
02.05.2020, 19:43  [ТС]
Сори, я его добавил по совету товарища выше, однако тк это не помогло снес из реализации но забыл снести из объявления.

Добавлено через 1 минуту
Не думаю, что текст ошибок возникающих при работе с шаблонным классом сильно поможет.
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.05.2020, 19:46
C++
1
2
3
4
5
6
#pragma once
#include"Point.h"
template<class A>
class Circle :public Point<A>{
public:
  const Line<A>& get_Line()const ;
А класс Line где?

Добавлено через 2 минуты
Цитата Сообщение от NBS2k Посмотреть сообщение
Сори, я его добавил по совету товарища выше, однако тк это не помогло снес из реализации но забыл снести из объявления.
Что именно не помогло?
Цитата Сообщение от NBS2k Посмотреть сообщение
Не думаю, что текст ошибок возникающих при работе с шаблонным классом сильно поможет.
Просто покажи и всё, мы сами разберёмся
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
02.05.2020, 19:46
Цитата Сообщение от NBS2k Посмотреть сообщение
я его добавил по совету товарища выше, однако тк это не помогло снес из реализации но забыл снести из объявления.
Тут никому не интересны ваши рассказы "про код" и про "не помогло".

Приводите точный код, а не ваши фантазии. И точный текст сообщений об ошибках. Сколько раз это нужно повторить?
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11
02.05.2020, 19:48  [ТС]
Line.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include"Point.h"
#pragma once
template <class D>
class Line :public Point<D>{
public:
  Line() :Point(){}
  Line(Point& a, Point& b);
  Line(Line& t);
  Point<D> get_PointA();
  Point<D> get_PointB();
  float module();
  Line& operator =(Line& rhs);
  ostream& print(ostream& out)override;
  float Area()override;
  float V()override;
  void set_line(Point& A, Point& B);
private:
  Point koorS;
};
#include "line_doing.h"
line_doing.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include"Point.h"
#pragma once
template <class D>
class Line :public Point<D>{
public:
  Line() :Point(){}
  Line(Point& a, Point& b);
  Line(Line& t);
  Point<D> get_PointA();
  Point<D> get_PointB();
  float module();
  Line& operator =(Line& rhs);
  ostream& print(ostream& out)override;
  float Area()override;
  float V()override;
  void set_line(Point& A, Point& B);
private:
  Point koorS;
};
#include "line_doing.h"
Ошибки:
error C2039: get_Line: не является членом "Circle"
error C2059: синтаксическая ошибка: <
error C2065: E: необъявленный идентификатор c
error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
error C2143: синтаксическая ошибка: отсутствие ";" перед "<" c
error C2143: синтаксическая ошибка: отсутствие ";" перед "<"
error C2238: непредвиденные лексемы перед ";"
error C2238: непредвиденные лексемы перед ";"
error C2923: Circle: "E" не является допустимым аргументом типа шаблон для параметра "A"
error C2988: неопознанное объявление или определение шаблона
error C4430: отсутствует спецификатор типа - предполагается int.
error C4430: отсутствует спецификатор типа - предполагается int.
error C4430: отсутствует спецификатор типа - предполагается int.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
02.05.2020, 19:50
Цитата Сообщение от NBS2k Посмотреть сообщение
Line.h
line_doing.h
Что это за две копии одно и того же?

Цитата Сообщение от NBS2k Посмотреть сообщение
error C2039: get_Line: не является членом "Circle"
Ну и? Ошибка в описании класса Circle. Где оно? Почему вы до сих пор не привели реальный код?
0
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11
02.05.2020, 19:53  [ТС]
Circle.h
C++
1
2
3
4
5
6
7
8
9
10
#include"Point.h"
#pragma once
template<class A>
class Circle :public Point<A>{
public:
 Line<A> get_Line();
private:
  Line<A> length;
};
#include "circle_doing.h"
circle_doing.h
C++
1
2
3
4
5
template<class E>
 Line<E> Circle<E>::get_Line()
{
    return length;
}
0
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
02.05.2020, 19:54
Лучший ответ Сообщение было отмечено NBS2k как решение

Решение

NBS2k, а Line.h чего не подключили перед Circle ?
1
0 / 0 / 1
Регистрация: 08.11.2017
Сообщений: 11
02.05.2020, 19:59  [ТС]
Лоол, спасибо за внимательность)

Добавлено через 2 минуты
Дядь, а ты очень душный.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
02.05.2020, 20:01
Цитата Сообщение от NBS2k Посмотреть сообщение
Лоол, спасибо за внимательность)
Неподключение Line.h не приведет к ошибке "error C2039: get_Line: не является членом "Circle". То есть все таки через фантазии и выдумки мы не пробились.
0
87 / 87 / 18
Регистрация: 11.06.2018
Сообщений: 302
02.05.2020, 20:01
NBS2k, "дядя" вам правильно все говорит. У меня не было шансов вам помочь без полного кода. Поэтому в следующий раз сразу его выкладывайте.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12925 / 6793 / 1819
Регистрация: 18.10.2014
Сообщений: 17,190
02.05.2020, 20:04
Формально это некорректно

C++
1
2
3
4
5
6
7
8
9
10
template <class D>
class Line :public Point<D>{
public:
  ...
  Line(Point& a, Point& b);
  ...
  void set_line(Point& A, Point& B);
  ...
  Point koorS;
};
Везде должны быть явно указаны аргументы для шаблона Point. Visual Studio не считает это ошибкой, но это ошибка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.05.2020, 20:04
Помогаю со студенческими работами здесь

Функция-член шаблонного класса
Как правильно объявить функцию-член шаблонного класса? Класс: template &lt;class SType&gt; class Set { int len; // число...

Дружественная шаблонная функция шаблонного класса
Не компилируется. Подскажите правильный синтаксис. template&lt;typename T&gt; class A; template&lt;typename T, typename ... Args&gt; void...

Функция, возвращающая объект класса
Visual c++ Visual Studio 2010 Есть задание, в котором, нужно создать класс и некоторые методы. Я создал public ref class. ...

Функция, возвращающая объект класса
Всем доброго времени суток. Хотел бы узнать правильное описание функции возвращающей объект класса. У меня есть class Matches {} ...

Функция, возвращающая экземпляр класса
Доброго времени суток. Допустим есть у нас функция, результатом которой является некий объект: MyClass* func() { ... ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru