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

Инициализация переменной в struct - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
25.12.2012, 11:33     Инициализация переменной в struct #1
Как исправить эту ошибку?
error C2864: wmain::Triangle::name: в пределах класса могут быть инициализированы только статические константные данные-члены целого типа

C++
1
2
3
4
5
6
7
struct Triangle
{
    int a;
    int b;
    int c;
    const char name[] = "Треугольник";
};
Надо чтобы в самой структуре была константная переменная уже инициализирована
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2012, 11:33     Инициализация переменной в struct
Посмотрите здесь:

Инициализация переменной C++
C++ Инициализация переменной
Инициализация переменной C++
C++ Инициализация static переменной
C++ вызов метода, инициализация переменной
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.12.2012, 11:38     Инициализация переменной в struct #2
зачем? Какой смысл каждому объекту добавлять константное поле?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
25.12.2012, 11:38     Инициализация переменной в struct #3
Вариант 1: пишем конструктор, инициализируем в нем.
Вариант 2: инициализируем при создании объекта Triangle t = {0, 0, 0, "tr"};
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
25.12.2012, 11:53  [ТС]     Инициализация переменной в struct #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Какой смысл каждому объекту добавлять константное поле?
Это я потом буду переменные создавать разных типов треугольник, квадрат, круг. У всех будет name[] чтобы узнать к какому типу принадлежит переменная

Не получается конструктор написать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Triangle
{
    Triangle();
    int a;
    int b;
    int c;
    const char name[20];
};
 
Triangle::Triangle()
{                                   // error C2143: синтаксическая ошибка: отсутствие ";" перед "{"
    strcpy(name, "Треугольник");    // error C2065: name: необъявленный идентификатор
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
25.12.2012, 11:56     Инициализация переменной в struct #5
Цитата Сообщение от Flurry Посмотреть сообщение
Это я потом буду переменные создавать разных типов треугольник, квадрат, круг. У всех будет name[] чтобы узнать к какому типу принадлежит переменная
А-ха-ха. Открой для себя наследование, полиморфизм и виртуальные функции
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
25.12.2012, 12:02  [ТС]     Инициализация переменной в struct #6
Сейчас наследование я не знаю. Надо конструктор написать для этой структуры. Как правильно сделать?
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
25.12.2012, 12:15     Инициализация переменной в struct #7
Например так:
C++
1
2
3
4
5
6
7
8
9
struct Triangle
{
    Triangle() : name("Треугольник") {}
   
    int a;
    int b;
    int c;
    char const* const name;
};
Можно сделать name статическим членом:
C++
1
2
3
4
5
6
7
8
9
struct Triangle
{
    int a;
    int b;
    int c;
    static char const* const name;
};
 
char const* const Triangle::name = "Треугольник";
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
25.12.2012, 12:25  [ТС]     Инициализация переменной в struct #8
gray_fox , спасибо!
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
25.12.2012, 12:32     Инициализация переменной в struct #9
Цитата Сообщение от Flurry Посмотреть сообщение
У всех будет name[] чтобы узнать к какому типу принадлежит переменная
Плохая идея. Но если так уж хочется, то лучше для этого воспользоваться перечислением. Примерно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
namespace figure_type {
 
enum type {
 
   triangle
 , square
   // whatever...
};
 
}     // namespace figure_type
 
// ...
 
struct Triangle {
 
   // ...
 
   static figure_type::type type;
};
 
figure_type::type Triangle::type = figure_type::triangle;
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
25.12.2012, 12:58  [ТС]     Инициализация переменной в struct #10
Цитата Сообщение от gray_fox Посмотреть сообщение
Плохая идея.
Плохо это то, что каждая переменная будет больше места занимать из-за того что содержит строку name?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2012, 13:10     Инициализация переменной в struct
Еще ссылки по теме:

Инициализация переменной в пространстве имён C++
C++ инициализация переменной, которая определена внутри функции
C++ Инициализация переменной в классе

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

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
25.12.2012, 13:10     Инициализация переменной в struct #11
Цитата Сообщение от Flurry Посмотреть сообщение
Плохо это то, что каждая переменная будет больше места занимать из-за того что содержит строку name?
Нет, просто сам факт того, что у тебя есть некие данные\методы для определения типа обычно (но не всегда, конечно) означает, что проектирование кривовато. Как правило полиморфизма достаточно.
Yandex
Объявления
25.12.2012, 13:10     Инициализация переменной в struct
Ответ Создать тему
Опции темы

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