Форум программистов, компьютерный форум CyberForum.ru

Инициализация структуры через точку - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 404
30.11.2012, 18:12     Инициализация структуры через точку #1
Доброго
юзаю MVS2012

Проблема
есть структура
C++
1
2
3
4
5
struct ST 
{
    int a;
    int b;
};
Пытаюсь инициализировать её
C++
1
ST st[]={{.a=5,.b=2},{.a=2,.b=3}};
Не компилируется, хотя так вроде разрешено делать (в xCode без проблем)
мб кто сталкивался
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 18:12     Инициализация структуры через точку
Посмотрите здесь:

СИ:Определить структуры, описывающие точку в полярной и декартовой системах координат. C++
Инициализация массива через конструктор. Вопрос. C++
C++ Инициализация членов структуры
Инициализация полей класса через vector<> C++
Структуры, инициализация переменных C++
C++ Инициализация массива через конструктор
C++ Инициализация массива объектов через конструктор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1424 / 761 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
30.11.2012, 18:18     Инициализация структуры через точку #2
Добавьте конструктор в структуру.
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 404
30.11.2012, 18:26  [ТС]     Инициализация структуры через точку #3
к сожалению, добавление конструктора ничего не дало
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct ST
{
    ST(){};
    ST(int aa,int bb)
    {
        a=aa;
        b=bb;
    }
    int a;
    int b;
};
int main()
{
    ST st[]={{.a=1,.b=2},{.a=2,.b=1}};
    return 0;
}
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.11.2012, 18:37     Инициализация структуры через точку #4
LineStown, так компилится
C++
1
2
3
4
5
6
7
8
9
10
11
struct ST
{
    int a;
    int b;
};
 
int main()
{
    ST st[]={ {1, 2}, {2, 1} };
    return 0;
}
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 404
30.11.2012, 18:38  [ТС]     Инициализация структуры через точку #5
go, спасибо конечно, но вопрос конкретно про такую инициализацию
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.11.2012, 18:43     Инициализация структуры через точку #6
Цитата Сообщение от LineStown Посмотреть сообщение
про такую инициализацию
Это какую такую? Вот так правильно нужно делать. Инициализация в конструкторе. А переменные лучше в приват засунуть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct ST
{
    ST(int aa) { a = aa; }
    ST(int aa,int bb)
    {
        a=aa;
        b=bb;
    }
    int a;
    int b;
};
 
int main()
{
    ST st[]={ ST(1), ST(2, 4) };
}
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 404
30.11.2012, 18:48  [ТС]     Инициализация структуры через точку #7
go, объясню в кратце
исходя из википедии
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct str_name
{
        private:
                int         member_1;
                float       member_2;
        public:
                std::string member_3;
        // ...
};
// примеры инициализации структуры.
str_name struct0;
str_name struct1 = {1, 3.1416, "doit" /* ... */};
str_name struct2 = {member_1:2, member_2:3.1416, member_3:"doit" /* ... */};
str_name struct2 = {.member_1=2, .member_2=3.1416, .member_3="doit" /* ... */};
все корректно (последний пример)
проект кросс платформенный, в xCode(OS X) все прекрасно работает, в студии под винду не хочет работать, вопрос в том почему
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
30.11.2012, 19:00     Инициализация структуры через точку #8
C++
1
ST s[] = { {s[0].a=2, s[0].b=3}, {s[1].a=4, s[1].b=5} };
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1238 / 987 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
30.11.2012, 19:01     Инициализация структуры через точку #9
Подобная инициализация — это стандартная возможность языка Си.

Естественно, компиляторы Си++ не обязаны её поддерживать, но могут в качестве расширения. Равно как и инициализацию вида
member_2 : 3.1416
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 404
30.11.2012, 19:04  [ТС]     Инициализация структуры через точку #10
~OhMyGodSoLong~, вот я собственно и интересуюсь, может ли студия понимать такие обороты
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1238 / 987 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
30.11.2012, 19:07     Инициализация структуры через точку #11
Как вы убедились, не может. В стандарте Си++ этого нет. Для Си Студия поддерживает только старый стандарт, где этого тоже нет. В расширениях Microsoft этого тоже нет.
LineStown
 Аватар для LineStown
63 / 63 / 3
Регистрация: 04.08.2010
Сообщений: 404
30.11.2012, 19:11  [ТС]     Инициализация структуры через точку #12
спасибо за ответ
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2012, 20:50     Инициализация структуры через точку
Еще ссылки по теме:

C++ Инициализация полей структуры из файла
C++ Структуры. Точки. Найти точку, которая наиболее удалена от начала координат
C++ Инициализация POD-структуры C++11
Инициализация указателя через функцию C++
Инициализация объектов через конструктор(объясните в чём ошибка) C++

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

Или воспользуйтесь поиском по форуму:
go
Эксперт C++
3584 / 1364 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
30.11.2012, 20:50     Инициализация структуры через точку #13
Цитата Сообщение от LineStown Посмотреть сообщение
str_name struct0;
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Подобная инициализация — это стандартная возможность языка Си.
Только вот он такое объявление не поддерживает

Да и модификаторы доступа тоже взяты с С++. Интересно, как вы собираетесь к привэйт членам получить доступ.
Yandex
Объявления
30.11.2012, 20:50     Инициализация структуры через точку
Ответ Создать тему
Опции темы

Текущее время: 04:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru