Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Выдает ошибку https://www.cyberforum.ru/ cpp-beginners/ thread863193.html
Есть алгоритм для бинарного поиска: #include "stdafx.h" #include <iostream> using namespace std; int main() {setlocale(LC_ALL,"Rus"); const float sr_ros=165; const int y=20; int i=0, x=0, k=0;...
Блок-схемы (Построить последовательность всех простых делителей заданного числа) C++
1.Построить последовательность всех простых делителей заданного числа и для всех элементов этой последовательности построить все возможные перестановки. 2.Выполнить сортировку одномерного массива...
C++ Нажатие кнопки при задержке на ней курсора https://www.cyberforum.ru/ cpp-beginners/ thread863169.html
Доброго времени суток! Есть кнопка, как сделать нажатие на ней, если на ней задержался курсор, например на 3 секунды?
C++ Как лучше найти последнее вхождение символа в std::wstring? https://www.cyberforum.ru/ cpp-beginners/ thread863163.html
Как лучше найти последнее вхождение символа в std::wstring?
C++ Найти минимальный элемент массива, и поменять местами с первым
вроде как минимальный елемент находит , но менять местами с 1 не хочет ( помогите дописать #include <math.h> #include <conio.h> #include <iostream.h> //------------------------------ float...
C++ Создание дерева С++! https://www.cyberforum.ru/ cpp-beginners/ thread863147.html
Здравствуйте. Вот имеется задание на курсовую - сделать программу, делающую обход дерева, обход на заданную глубину и поиск в нем. Решил начать с самого простого и сразу наткнулся на проблему - как...
C++ функция, оперирующая другой функцией https://www.cyberforum.ru/ cpp-beginners/ thread863117.html
проблема в том, что когда в ф-ции исп-ся другая ф-ция , она(2ая ф-ция) меняет аргументы только в своем теле , как показывает пошаговый просмотр. привожу упрощенную схему. там ф-ция b изменит bool b,...
C++ Переполнение буфера
Подскажите, пожалуйста кто-нибудь, в чем беда... Во время выполения программы пишет, что буфер переполнен, что точка останова смещена и "Дополнительные сведения см. в разделе "Инструкции по отладке в...
C++ Вычисление суммы первых N членов ряда и запись результатов в файл https://www.cyberforum.ru/ cpp-beginners/ thread863051.html
Помогите пожалуйста. Очень надо:))) Написать программу, которая вычисляет сумму первых N членов ряда 1+1/2+1/3+1/4+... Исходные данные (N – количество суммируемых членов ряда) вводятся из файла...
C++ Сложение цифр в числе https://www.cyberforum.ru/ cpp-beginners/ thread863049.html
народ помогите,пожалуйста, не могу написать программу сложения чисел в числе,без использования цикла и его операторов,мы до них еще не дошли,кровь из носу на завтра она нужна,тут же на форуме нашел...
Диалог с прльзователем C++
Дело в том что есть такая вот программа и я не могу додуматься как бы мне в ней реализовать диалог с пользователем то есть красиво вывести переменные по его выбору x y z max min nomermax nomermin. В...
C++ Неправильный вывод данных Программа о авторе книги и его, собственно, книге. Надо подсчитать заработок за все переиздательства книги и общий налог. Формуы подставил, но выводит неправильное число. Нужен взгляд эксперта:) ... https://www.cyberforum.ru/ cpp-beginners/ thread863038.html
What a waste!
1604 / 1297 / 179
Регистрация: 21.04.2012
Сообщений: 2,723
0

Кортеж с абстрактным типом как параметр шаблона + smart_ptr - C++ - Ответ 4547602

13.05.2013, 09:43. Показов 1324. Ответов 2
Метки (Все метки)

Имеем кортеж (std::tuple) с абстрактным типом, параметризуем этим шаблон класса, экземпляров кортежа нигде не создаём. Создаём экземпляры параметризованного шаблона: на стеке - ок, в куче - ок, но когда используем std::[unique/shared]_ptr - получаем ошибку компиляции от куда то из недр std::tuple - "нельзя объявить поле абстрактного типа". gcc-4.7.2 .
код
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
25
26
27
28
29
30
31
#include <tuple>
#include <memory>
 
 
template<typename T>
struct holder {};
 
struct abstract {
 
   virtual ~abstract() = 0;
};
 
abstract::~abstract() {}
 
 
int main() {
   using types     = std::tuple<abstract>;
   using holder_t  = holder<types>;
 
   // Ok
   holder_t local;
 
   // Ok
   new holder_t;
 
   // ?
   std::unique_ptr<holder_t> unique(new holder_t);
 
   // ?
   std::make_shared<holder_t>();
}
http://ideone.com/7Qkm2E

ошибки
Код
In file included from prog.cpp:1:0:
/usr/include/c++/4.7/tuple: In instantiation of ‘struct std::_Head_base<0u, abstract, false>’:
/usr/include/c++/4.7/tuple:215:12:   required from ‘struct std::_Tuple_impl<0u, abstract>’
/usr/include/c++/4.7/tuple:374:11:   required from ‘class std::tuple<abstract>’
/usr/include/c++/4.7/tuple:744:35:   required from ‘constexpr typename std::__add_ref<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::type std::get(std::tuple<_Elements ...>&) [with unsigned int __i = 0u; _Elements = {holder<std::tuple<abstract> >*, std::default_delete<holder<std::tuple<abstract> > >}; typename std::__add_ref<typename std::tuple_element<__i, std::tuple<_Elements ...> >::type>::type = holder<std::tuple<abstract> >*&]’
/usr/include/c++/4.7/bits/unique_ptr.h:171:32:   required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = holder<std::tuple<abstract> >; _Dp = std::default_delete<holder<std::tuple<abstract> > >]’
prog.cpp:28:49:   required from here
/usr/include/c++/4.7/tuple:166:13: error: cannot declare field ‘std::_Head_base<0u, abstract, false>::_M_head_impl’ to be of abstract type ‘abstract’
prog.cpp:9:8: note:   because the following virtual functions are pure within ‘abstract’:
prog.cpp:14:1: note: 	virtual abstract::~abstract()

Я не могу понять, в чём конкретно причина, видимо где то создаётся экземпляр кортежа. Так и должно быть?

Вернуться к обсуждению:
Кортеж с абстрактным типом как параметр шаблона + smart_ptr C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.05.2013, 09:43
Готовые ответы и решения:

Задача с абстрактным типом данных
Даны сведения о 14 кубиках: длина ребра в сантиметрах, его цвет и материал (деревянный,...

Невозможно определить переменную абстрактным типом
Добрый день! Имеется следующий код: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace...

Как вывести кортеж целиком и как распаковать кортеж в переменные?
Как вывести кортеж целиком и как распаковать кортеж в переменные?

Как передать параметр в хранимую процедуру с типом nvarchar
Добрый день! Есть хранимая процедура ALTER PROCEDURE . @name_sotr nvarchar(50) AS BEGIN ...

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2013, 09:43

Как передать REST API параметр с типом Integer
При обращении с REST API Битрикс24 из php нужно передать параметр TASKID Если делаю через cURL ...

Передача функции как параметр шаблона
Хочу передавать в шаблон любую функцию без параметров и вызывать ее из него. Как это сделать? ...

Свой тип как параметр шаблона
Есть вопрос по коду: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;vector&gt; using namespace...

Шаблоннный клас как параметр шаблона
Если в кратце: Имеется такой код: typedef ByteStuffing&lt;USART0, CRC8&lt;USART0&gt; &gt; StreamDelimiter;...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.