Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
h3mbr0
297 / 106 / 31
Регистрация: 12.03.2012
Сообщений: 428
1

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

23.06.2017, 23:37. Просмотров 350. Ответов 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
Ответы с готовыми решениями:

Struct (есть ли стандартный конструктор)
Имеется студия 2010 struct _1C { string Tag; string Rus; string Eng;...

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

Приватный конструктор и стандартный контейнер. Два барана на мосту
Всем суп! Итак, банальная вещь - в заголовке - не желает компилироваться....

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

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

10
hoggy
Заблокирован
Эксперт С++
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
297 / 106 / 31
Регистрация: 12.03.2012
Сообщений: 428
23.06.2017, 23:52  [ТС] 3
hoggy,
По задумке они анонимные
Не совсем по стандарту, но хотелось бы оставить как есть
Повторюсь, раньше оно работало
Не существует других способов исправить ситуацию?

Добавлено через 3 минуты
К слову, пытаюсь собрать под VS2017
Собиралось ранее под 2005, 2008, возможно 2010
0
hoggy
Заблокирован
Эксперт С++
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
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
24.06.2017, 00:00 5
Цитата Сообщение от h3mbr0 Посмотреть сообщение
По задумке они анонимные
А VS поддерживает анонимные в качестве расширения?
В C++ такого нет, а в стандартном C появилось
только с C11, который VS не поддерживает.
0
h3mbr0
297 / 106 / 31
Регистрация: 12.03.2012
Сообщений: 428
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
++Ͻ
14776 / 8452 / 1605
Регистрация: 27.09.2012
Сообщений: 20,800
Записей в блоге: 2
Завершенные тесты: 1
24.06.2017, 00:11 7
А может быть так?
C++
1
2
3
4
        struct My_VECTOR
        {
            My_VECTOR(){}
        };
1
hoggy
Заблокирован
Эксперт С++
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
297 / 106 / 31
Регистрация: 12.03.2012
Сообщений: 428
24.06.2017, 00:19  [ТС] 9
Цитата Сообщение от Croessmah Посмотреть сообщение
А может быть так?
Не все так просто, класс невероятно огромный, пустой класс конечно заработал бы
Кстати говоря, провел полную рекомпиляцию несколько раз:
С
C++
1
My_VECTOR() {}
Выкидывает ошибки
С
C++
1
My_VECTOR() = default;
Нет

Честно говоря, это кажется мне слишком сложным чтобы в данный момент разбираться с магией вуду, рад что собралось, спасибо за помощь
0
gray_fox
What a waste!
1554 / 1259 / 166
Регистрация: 21.04.2012
Сообщений: 2,636
Завершенные тесты: 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
297 / 106 / 31
Регистрация: 12.03.2012
Сообщений: 428
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

Конструктор класса, конструктор копирования запускается не тот который нужен
Есть такой конструктор: Neuron::Neuron(int iType_activation_funk) {...

Будет ли определен компилятором конструктор по умолчанию, если есть конструктор с дефолтным параметром?
Добрый день, сразу к делу, есть некий класс class some { int x; public:...

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


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

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

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