powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / type-rich инициализация
25 сообщений из 74, страница 1 из 3
type-rich инициализация
    #39887258
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что-то не догоню (опять на ночь глядя), как проинициализировать такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
struct Test
{
    int i;
};

struct S
{
    int a,b;
    Test t;
};

int main()
{
    vector<S> s;
    s.push_back({1,2, Test{5}});
// error: no matching function for call to ‘std::vector<S>::push_back(<brace-enclosed initializer list>)’
// и так тоже не:
    s.push_back({1,2, 5});
// а так да (если из S Test убрать):
    s.push_back({1,2});
}


ЧЯДНТ?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887260
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

Должно работать. И так тоже должно:
Код: plaintext
1.
	s.push_back({ 1,2, {5} });
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887262
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

древний конпилятор!
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887420
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а, блин, что C++17 нужен же
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887502
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
полудух,

древний конпилятор!
gcc компилирует с С++11 без проблем
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887693
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня g++ v6 не компилировал
v8.3 - ok
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887756
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а тоже самое, но в таком виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct Test
{
    int i;
};

struct S_in
{
    int a,b;
};

struct S : S_in
{
    Test t;
};


выдаёт такую же ошибку...
вроде в S должен получиться такой же набор: a,b,i
ан нет... что-то ему не нравится
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887771
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
а тоже самое, но в таком виде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
struct Test
{
    int i;
};

struct S_in
{
    int a,b;
};

struct S : S_in
{
    Test t;
};



выдаёт такую же ошибку...
вроде в S должен получиться такой же набор: a,b,i
ан нет... что-то ему не нравится

Вгде "такая же" ошибка?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887772
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

MS VS 2017, C++ Langusge Standard: ISO C++17 Standard (/std:c++17)
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887773
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

mingw 8.2.0, если set(CMAKE_CXX_STANDARD 17)

- тоже "всё работает".
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887774
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот сук, ему -std=c++1z надо было дать
а если наследование убрать, то и без работает
...
Рейтинг: 0 / 0
type-rich инициализация
    #39887813
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
вот сук, ему -std=c++1z надо было...


C++ 11 = > C++1x
C++ 14 = > C++1y
C++ 17 = > C++1z
...
C++ 20 => C++2a :)
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888204
Z axis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
вот сук, ему -std=c++1z надо было дать
а если наследование убрать, то и без работает
Ну, это неудивительно. До C++17 агрегат вообще не мог иметь базовых классов.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888223
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чего не мог иметь?
может наследоваться не мог?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888270
Z axis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух
чего не мог иметь?
может наследоваться не мог?
В чём разница с тем, что сказал я?
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888305
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в терминологии запутался
я привык их называть "родительский класс"
а "агрегатом" классы вообще никто не называет
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888306
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
полудух
вот сук, ему -std=c++1z надо было...


C++ 11 = > C++1x
C++ 14 = > C++1y
C++ 17 = > C++1z
...
C++ 20 => C++2a :)

остаётся только гадать, почему нельзя было назвать c++14, c++17
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888307
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

чтобы духи лажали....
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888325
vAH_O6Vg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудух
остаётся только гадать, почему нельзя было назвать c++14, c++17

Потому что это разные режимы компиляции. Буквенные стандарты - это частичная реализация черновиков новых стандартов. Стандарт двадцатого года ещё дописывается, а -std=c++2a уже есть. Для уже вышедших и полностью реализованных нужно писать -std=c++17, -std=c++14 и т.д.
...
Рейтинг: 0 / 0
type-rich инициализация
    #39888342
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок.
тем временем, я нашёл новый косяк

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
struct Test
{
    int i;
};

struct S_in
{
    vector<int> z;
    int a,b;
};

struct S : S_in
{
    vector<int> y;
    Test t;
    vector<int> bb;
};

int main()
{
    vector<S> s;
    s.push_back({vector<int>{345},1,2, {22}, Test{"abc",5}, {5,6,12}});
}


{345} НЕ работает без vector<int>, хотя и "y", и "bb" без проблем добавляются...
error: no matching function for call to ‘std::vector<S>::push_back(<brace-enclosed initializer list>)’
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890745
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не пойму, что не клеится...
Код: plaintext
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.
struct Slova
{
    string w1, w2;
};

int main()
{
    vector<Slova> *v;
    vector<Slova> v1 {{"Слово1", "Слово2"},   {"Слово3", "Слово4"}};
    vector<Slova> v2 {{"Дело1", "Дело2"},   {"Дело3", "Дело4"}};

    // я хочу, чтобы v получал v1 ЛИБО v2 (каждый раз будет выбираться новый), и чтобы получал по ссылке
    // move() тут не годится, т.к. v1 и v2 должны выжить для будущих подключений.
    // пытаюсь сделать так:
    vector<Slova> *v = &v1;
    // и так:
    v = &v1;

    // но на попытку:
    cout << *v[1].w1 << endl;
    // выгребаю: error: ‘class std::vector<ent::Slova>’ has no member named ‘w1’
    // (тоже самое и без *)

    // НО вот так всё ок:
    for (auto &s : *v)
        {cout << s.w1 << endl;} // шо за?!

}
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890786
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так тоже ок:
cout << v1[1].w1 << endl;
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890811
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
полудух,

Код: plaintext
1.
(*v)[1].w1
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890816
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а
Код: plaintext
1.
*v[1].w1


означает
Код: plaintext
1.
*((*(v+1)).w1)
...
Рейтинг: 0 / 0
type-rich инициализация
    #39890823
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
охх...
а что означают все эти скобочки? (где-то там кроется dereferencing, я полагаю)
зачем надо было так усложнять то, голову же сломать можно


и ведь это единственный правильный способ по ссылке привязать?
...
Рейтинг: 0 / 0
25 сообщений из 74, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / type-rich инициализация
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]