no matching function при инициализации std::tuple
привет!
есть такой код:
template <typename ...Args>
struct settings {
using container_type = std::tuple<typename std::decay<Args>::type...>;
container_type kwords;
template <typename ...Types>
explicit settings(const Types &...types)
:kwords(types...) // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
{}
};
то есть я хочу чтоб каждый член кортежа инициализировался коснтантной ссылкой.
но получаю:
error: no matching function for call to ‘std::tuple<kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t>::tuple(const kwords::fname_t&, const kwords::fsize_t&, const kwords::radius_t&, const kwords::radius2_t&, const kwords::poss_t&)
все эти kwords — это некоторые структуры.
что не так?
спасибо!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: no matching function при инициализации std::tuple
Здравствуйте, niXman, Вы писали:
X>но получаю: error: no matching function for call to ‘std::tuple<kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t>::tuple(const kwords::fname_t&, const kwords::fsize_t&, const kwords::radius_t&, const kwords::radius2_t&, const kwords::poss_t&)
А остальной текст ошибки и код зачем скрыл? Чтобы сложнее было догадываться? :)
X>что не так?
Например, может отсутствовать копирующий конструктор у одной из подструктур. Но соответствующего кода в посте не приведено чтобы сказать наверняка.
Re[2]: no matching function при инициализации std::tuple
Здравствуйте, watchmaker, Вы писали:
W>А остальной текст ошибки и код зачем скрыл? Чтобы сложнее было догадываться?
нет, не для этого =)
вот:
In file included from /home/nixman/projects/justsettings/main.cpp:2:
/home/nixman/projects/justsettings/./include/justsettings/justsettings.hpp: In instantiation of ‘justsettings::settings<Args>::settings(const Types& ...) [with Types = {kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t}; Args = {kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t}]’:
/home/nixman/projects/justsettings/./include/justsettings/justsettings.hpp:510:23: required from ‘auto justsettings::make_settings(const Args& ...) [with Args = {kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t}]’
/home/nixman/projects/justsettings/main.cpp:58:5: required from here
/home/nixman/projects/justsettings/./include/justsettings/justsettings.hpp:325:25: error: no matching function for call to ‘std::tuple<kwords::fname_t, kwords::fsize_t, kwords::radius_t, kwords::radius2_t, kwords::poss_t>::tuple(const kwords::fname_t&, const kwords::fsize_t&, const kwords::radius_t&, const kwords::radius2_t&, const kwords::poss_t&)’
325 | :kwords(types...)
| ^
но это тоже не всё. там очень много предположений компилятора о вариантах...
W>Например, может отсутствовать копирующий конструктор у одной из подструктур. Но соответствующего кода в посте не приведено чтобы сказать наверняка.
вряд ли. все эти структуры генерятся препроцессором.
зы
проект не завершен, потому не опубликован.
могу опубликовать, если нужно.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: no matching function при инициализации std::tuple
Здравствуйте, niXman, Вы писали:
X>зы
X>проект не завершен, потому не опубликован.
X>могу опубликовать, если нужно.
не нужно.
покажи минимальный компилируемый код, воспроизводящий проблему
Re[4]: no matching function при инициализации std::tuple
Здравствуйте, night beast, Вы писали:
NB>не нужно.
NB>покажи минимальный компилируемый код, воспроизводящий проблему
тогда проще опубликовать =)
ща.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: no matching function при инициализации std::tuple
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, watchmaker, Вы писали:
W>>А остальной текст ошибки и код зачем скрыл? Чтобы сложнее было догадываться?
X>нет, не для этого =)
X>вот:
X>но это тоже не всё.
Так зачем ты эту важную информацию скрываешь?!
Даже сейчас. Или намёк, что нужно показать сообщение об ошибке и соответствующий код, был не понят?
X>могу опубликовать, если нужно.
Лол. Как будто это нам нужно решить эту проблему, а не тебе
Но если серьёзно, лучше вычлени оттуда минимальный пример.
Re[4]: no matching function при инициализации std::tuple
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: no matching function при инициализации std::tuple
Здравствуйте, niXman, Вы писали:
X>готово: https://github.com/niXman/ttt
X>использование: https://github.com/niXman/ttt/blob/master/main.cpp#L58
X>вот `justsettings.hpp:510`: https://github.com/niXman/ttt/blob/master/include/justsettings/justsettings.hpp#L510
X>вот `justsettings.hpp:325`: https://github.com/niXman/ttt/blob/master/include/justsettings/justsettings.hpp#L325
X>могу еще как-то помочь?
X>зы
X>проект о том, чтоб реализовать именованные аргументы + парсить argv используя именованные аргументы.
struct optional_type {
optional_type(const optional_type &) = delete ; // <------------------ это
Re[6]: no matching function при инициализации std::tuple
Здравствуйте, vopl, Вы писали:
V>V>struct optional_type {
V> optional_type(const optional_type &) = delete ; // <------------------ это
V>
думаю нет, но проверю.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: no matching function при инициализации std::tuple
V>V>struct optional_type {
V> optional_type(const optional_type &) = delete ; // <------------------ это
V>
да, если copy-ctor и copy-assign сделать default — то компилится умпешно!
спасибо!
зы
но в сообщении об ошибке нет ни слова об этом! фак!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: no matching function при инициализации std::tuple
V>V>struct optional_type {
V> optional_type(const optional_type &) = delete ; // <------------------ это
V>
изначально все kwords были move-only. потом мне пришлось сделать их и копируемыми, но про optional_type я забыл.
больше года тянется этот проект %)
всем спасибо!
зы
этот проект пока удалю. позже выложу чистовой вариант.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[7]: no matching function при инициализации std::tuple
От:
vopl
Дата: 09.01.21 10:09
Оценка:
Здравствуйте, niXman, Вы писали:
V>>V>>struct optional_type {
V>> optional_type(const optional_type &) = delete ; // <------------------ это
V>>
X>да, если copy-ctor и copy-assign сделать default — то компилится умпешно!
X>спасибо!
X>зы
X>но в сообщении об ошибке нет ни слова об этом! фак!
Это скрывается за SFINAE у std::tuple конструкторов. Не зря тебе предлагали сделать минимальный воспроизводящий пример
.
#include <justsettings/justsettings.hpp>
using namespace justsettings;
struct MySet_t//: ::justsettings::option_base
{
using value_type = int ;
using optional_type = ::justsettings::optional_type<value_type>;
MySet_t(const MySet_t &) = default ;
MySet_t& operator = (const MySet_t &) = default ;
MySet_t() = default ;
optional_type val;
};
int main(int argc, char **argv)
{
const MySet_t mySet;
MySet_t mySet2 = mySet; //copy ctor?
mySet2 = mySet; //copy operator?
auto set = make_settings(mySet);
return 0;
}
Re[8]: no matching function при инициализации std::tuple
V>Это скрывается за SFINAE у std::tuple конструкторов.
фак же! никакой помощи от компилятора в этом случае нет!
при этом в выводе ошибок он перечисляет кучу вариантов и объясняет почему они не подходят! но об этом ни слова!
V>Не зря тебе предлагали сделать минимальный воспроизводящий пример .
та да...
спасибо!
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить