Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
h3mbr0
290 / 100 / 25
Регистрация: 12.03.2012
Сообщений: 407
#1

Стандартный конструктор у union? - C++

23.06.2017, 23:37. Просмотров 254. Ответов 10
Метки нет (Все метки)

Не могу сообразить в чем проблема
C++
1
2
3
4
5
6
7
8
9
struct Foo {
    union {
        struct {float x,y,z;} v[3];
        struct
        {
            My_VECTOR v1,v2,v3;
        };
    };
};
При попытке инициализации:
the default constructor of "Foo" cannot be referenced -- it is a deleted function
Раньше, по всей видимости, собиралось
Нагуглил что это возможно из-за union, чего он хочет то?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2017, 23:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Стандартный конструктор у union? (C++):

Struct (есть ли стандартный конструктор) - C++
Имеется студия 2010 struct _1C { string Tag; string Rus; string Eng; }; В коде пишу: vector<_1C>

Стандартный конструктор копировщик и оператор = не справляются со своей задачей - C++
Всем привет ! Выяснил , что стандартный конструктор копировщик и оператор = не справляются со своей задачей в случае, если...

Приватный конструктор и стандартный контейнер. Два барана на мосту - C++
Всем суп! Итак, банальная вещь - в заголовке - не желает компилироваться. Суть, немного упрощённая, такова: class AAA { private: ...

Не могу сделать чтобы класс содержал основной конструктор и конструктор копирования - C++
Разработать класс ThreeAngle для работы с плоскими треугольниками. В качестве членов-данных задаются длины трех сторон треугольника. Класс...

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -> i = i; } }; Конструктор Test::Test всегда вызывается...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром? - C++
Добрый день, сразу к делу, есть некий класс class some { int x; public: some(int y = 1) : x(y) {} };

10
hoggy
6860 / 3067 / 525
Регистрация: 15.11.2014
Сообщений: 6,961
Завершенные тесты: 1
23.06.2017, 23:45 #2
Цитата Сообщение от h3mbr0 Посмотреть сообщение
чего он хочет то?
телепатов?

http://rextester.com/SHY90786

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using My_VECTOR = int;
 
struct Foo
{
    union 
    {
        struct {float x,y,z;} v[3];
        struct
        {
            My_VECTOR v1,v2,v3;
        } ve;
    } u;
};
 
int main()
{
}
1
h3mbr0
290 / 100 / 25
Регистрация: 12.03.2012
Сообщений: 407
23.06.2017, 23:52  [ТС] #3
hoggy,
По задумке они анонимные
Не совсем по стандарту, но хотелось бы оставить как есть
Повторюсь, раньше оно работало
Не существует других способов исправить ситуацию?

Добавлено через 3 минуты
К слову, пытаюсь собрать под VS2017
Собиралось ранее под 2005, 2008, возможно 2010
0
hoggy
6860 / 3067 / 525
Регистрация: 15.11.2014
Сообщений: 6,961
Завершенные тесты: 1
24.06.2017, 00:00 #4
Цитата Сообщение от h3mbr0 Посмотреть сообщение
По задумке они анонимные
http://rextester.com/HFZ94098


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using My_VECTOR = int;
 
struct Foo
{
    union 
    {
        struct {float x,y,z;} v[3];
        struct
        {
            My_VECTOR v1,v2,v3;
        } ;
    } ;
};
 
int main()
{
}
Цитата Сообщение от h3mbr0 Посмотреть сообщение
Повторюсь, раньше оно работало
Цитата Сообщение от hoggy Посмотреть сообщение
телепатов?
0
Croessmah
Ушел
13777 / 8027 / 927
Регистрация: 27.09.2012
Сообщений: 19,784
Записей в блоге: 3
Завершенные тесты: 1
24.06.2017, 00:00 #5
Цитата Сообщение от h3mbr0 Посмотреть сообщение
По задумке они анонимные
А VS поддерживает анонимные в качестве расширения?
В C++ такого нет, а в стандартном C появилось
только с C11, который VS не поддерживает.
0
h3mbr0
290 / 100 / 25
Регистрация: 12.03.2012
Сообщений: 407
24.06.2017, 00:07  [ТС] #6
Поддерживает, причем очень-очень давно

Мой косяк, прошу прощения - дело в My_VECTOR
Конструктор объявлен как
C++
1
My_VECTOR() {}
Если сделать = default; проблема отпадает, но все равно не очень понятно поведение

Добавлено через 3 минуты
Хмм, теперь местами появляется the default constructor of "My_VECTOR" cannot be referenced -- it is a deleted function
Что за новшество такое? Я имею ввиду, почему вдруг полезли эти ошибки, стандарт ужесточил какие-то правила для конструкторов?
0
Croessmah
Ушел
13777 / 8027 / 927
Регистрация: 27.09.2012
Сообщений: 19,784
Записей в блоге: 3
Завершенные тесты: 1
24.06.2017, 00:11 #7
А может быть так?
C++
1
2
3
4
        struct My_VECTOR
        {
            My_VECTOR(){}
        };
1
hoggy
6860 / 3067 / 525
Регистрация: 15.11.2014
Сообщений: 6,961
Завершенные тесты: 1
24.06.2017, 00:15 #8
Цитата Сообщение от Croessmah Посмотреть сообщение
А VS поддерживает анонимные в качестве расширения?
Код
warning C4201: nonstandard extension used: nameless struct/union
Добавлено через 55 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
А может быть так?
http://rextester.com/UGHDR85539
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
struct My_VECTOR
        {
            My_VECTOR(){}
        };
 
struct Foo
{
    union 
    {
        struct {float x,y,z;} v[3];
        struct
        {
            My_VECTOR v1,v2,v3;
        } ;
    } ;
};
 
int main()
{
}
1
h3mbr0
290 / 100 / 25
Регистрация: 12.03.2012
Сообщений: 407
24.06.2017, 00:19  [ТС] #9
Цитата Сообщение от Croessmah Посмотреть сообщение
А может быть так?
Не все так просто, класс невероятно огромный, пустой класс конечно заработал бы
Кстати говоря, провел полную рекомпиляцию несколько раз:
С
C++
1
My_VECTOR() {}
Выкидывает ошибки
С
C++
1
My_VECTOR() = default;
Нет

Честно говоря, это кажется мне слишком сложным чтобы в данный момент разбираться с магией вуду, рад что собралось, спасибо за помощь
0
gray_fox
What a waste!
1552 / 1257 / 74
Регистрация: 21.04.2012
Сообщений: 2,634
Завершенные тесты: 3
24.06.2017, 00:20 #10
Цитата Сообщение от h3mbr0 Посмотреть сообщение
Хмм, теперь местами появляется the default constructor of "My_VECTOR" cannot be referenced -- it is a deleted function
А какого определение My_VECTOR? Пример можетё привести? Иначе не особо понятно, как конструктор оказался deleted.
0
h3mbr0
290 / 100 / 25
Регистрация: 12.03.2012
Сообщений: 407
24.06.2017, 00:26  [ТС] #11
gray_fox,
C++
1
2
3
4
5
    union
    {
        struct { float x,y,z; };
        float v[3];
    };
Но там целый ряд других конструкторов, в том числе копирования
Чувствую, мне лучше без надобности не знать как это работает
0
24.06.2017, 00:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2017, 00:26
Привет! Вот еще темы с ответами:

Не могу правильно сделать конструктор и конструктор копирования и принадлежность точки с заданными координатами треугольнику - C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <windows.h> #include <math.h> #include <algorithm> using...

Создать класс. Написать конструктор по умолчанию, конструктор с параметрами. Перегрузить операции «меньше» и «равно» - C++
Помогите пожалуйста, хоть с одним из заданий. 1. Создать класс. Написать конструктор по умолчанию, конструктор с параметрами....

Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно? - C++
Можно ли использовать конструктор по умолчанию и конструктор инициализации одновременно?

Конструктор производного класса требует конструктор предка - C++
Выдаёт вот такую вот ошибку: no matching function for call to 'Cube::Cube()' class Cube { protected: int magInt; bool...


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

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

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