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

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

Войти
Регистрация
Восстановить пароль
 
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

Массив как член класса - C++

15.05.2014, 22:04. Просмотров 426. Ответов 5
Метки нет (Все метки)

Почему мне GCC выдаёт ошибку компиляции, что это zero-sized array ?

C++
1
2
3
struct Base {
    const char* d[]{"f", "f"};
};
Код
ISO C++ forbids zero-size array 'd' [-Wpedantic]
     const char* d[]{"f", "f"};
                             ^
../expert/main.cpp:230:29: error: too many initializers for 'const char* [0]'
Под конец дня башка кипит, не могу нормально рассуждать, чтобы самому узнать ошибку.

А так всё норм, почему???
C++
1
2
3
struct Base {
    const char* d[2]{"f", "f"};
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.05.2014, 22:04     Массив как член класса
Посмотрите здесь:

Статический массив как член класса - C++
Я туплю, что ли, почему это компилируется? о_О struct V { int v; }; V v1; V v2(v1); // копирование v2 = v1; //...

Большой двумерный массив как член класса - C++
Размеры массива 2048 на 512. Создал, заполняю в конструкторе, но результата нету. Такое вообще реально, без динамического выделения памяти?

Член-ссылка на другой член класса - C++
Есть класс Dot с двумя членами - x и y. Требуется еще один класс, который хранит width i height, но реализация этого класса ничем не...

Vector как член класса - C++
собственно заголовок моего класса: #pragma once #include <Vector> #include "StdAfx.h" #include "PObject.h" #include...

operator+ как член класса - C++
Могу ли я сделать operator+ как член класса таким образом? myClass& myClass::operator+(const myClass& other1, const myClass& other2) { ...

Динамическая матрица как член класса - C++
Доброго времени суток, не так давно отзывчивые люди научили меня тому, что я хочу старая тема Путём ручное выделения памяти под нужный...

Как вызвать член класса по адресу? - C++
В общем вопрос такой: допустим есть адрес класса, то получается по определенному смещению вызвать его член? (кстати, как можно найти...

Ifstream& как член класса - C++
Здравствуйте. Решаю задачу: Напишите функцию, получающую и качестве аргументов istream и vector<string> и возвращающую map<string,...

Как изменить статический приватный член класса? - C++
Как изменить статический приватный член класса если менять его нужно в main()!??

Указатель на классы, объявленный как член класса - C++
Если у кого-то сохранились какие-либо статьи, заметки в памяти на тему указателей, пожалуйста, дайте примеры подробных примеров, статьи,...

Переопределение операторов как член-класса и как дружественная функция - C++
Привет. Задача создать класс целых чисел, для него нужно переопределить операторы ++ и + как функции-члены и -- и - как дружественные...

Как создать член класса только для чтения - C++
Хочу создать член класса только для чтения. Можно, конечно, поместить член в раздел private и написать метод для получения его значения: ...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,181
Завершенные тесты: 1
15.05.2014, 22:22     Массив как член класса #2
Массивы так иницализировать нельзя.
C++
1
2
3
4
5
struct Base
{
    char d[2][2];
    Base(){strcpy(d[0],"f");strcpy(d[1],"f");}
};
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
15.05.2014, 22:30  [ТС]     Массив как член класса #3
Цитата Сообщение от zss Посмотреть сообщение
Массивы так иницализировать нельзя.
Почему? Сколько себя помню, так можно было.
+
Цитата Сообщение от gromo Посмотреть сообщение
А так всё норм, почему???
C++
1
2
3
struct Base {
const char* d[2]{"f", "f"};
};
Добавлено через 1 минуту
да в конце концов
C++
1
2
3
4
5
int main()
{
    const char* array[]{"abc", "abc"};
    return 0;
}
Хавается без предупреждений и ошибок -std=c++1y -Wpedantic -Wextra
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.05.2014, 22:33     Массив как член класса #4
Цитата Сообщение от gromo Посмотреть сообщение
Сколько себя помню, так можно было.
Одно дело внутри функции, и совсем другое - внутри класса.
Инициализация нестатических неконстантных полей внутри класса разрешена только начиная с C++11.
По данной ошибке не очень понятно (надо в стандарте порыться), почему компилятор не может вывести размер. Но вот clang например пишет более четкое сообщение:
error: array bound cannot be deduced from an in-class initializer
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
15.05.2014, 22:42  [ТС]     Массив как член класса #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Одно дело внутри функции, и совсем другое - внутри класса.
Инициализация нестатических неконстантных полей внутри класса разрешена только начиная с C++11.
Ну да, "сколько себя помню" я относил уже к С++11
Цитата Сообщение от Tulosba Посмотреть сообщение
По данной ошибке не очень понятно (надо в стандарте порыться), почему компилятор не может вывести размер.
да уж не понятно почему, ведь инициализация членов внутри декларации класса просто неявно подставляется в список инициализации каждого конструктора, и не ясно что такого в инициализации константного массива...
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
15.05.2014, 23:24     Массив как член класса #6
Вот на sof есть подобный вопрос, правда без однозначного ответа.

Если массив сделать статическим членом класса, то прокатывает:
C++
1
2
3
struct Base {
    static constexpr const char* d[] = {"f", "f"};
};
http://ideone.com/ek8Cor
Видимо проблема кроется в том, что на момент когда должен быть известен размер класса до списка инициализации еще дело не дошло.
Yandex
Объявления
15.05.2014, 23:24     Массив как член класса
Ответ Создать тему
Опции темы

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