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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.71
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
#1

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

25.12.2012, 11:33. Просмотров 2423. Ответов 10
Метки нет (Все метки)

Как исправить эту ошибку?
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++
class cRectangle{ public: cRectangle(); ~cRectangle(); void Rect(char h_symb, char v_symb, int init_x, int init_y,...

Инициализация переменной - C++
#include <iostream> #include <fstream> using namespace std; struct Chisla { int chislo; Chisla* next; }; Chisla*...

Инициализация переменной - C++
Приветствую уважаемые пользователи cyberforum! У меня появился вопрос по инициализации переменной с типом int Почему нельзя сделать вот...

Инициализация static переменной - C++
Задание опять же таки из книги Страуструпа: Определите два класса, каждый со статическим членом, так, чтобы конструирование статического...

Инициализация переменной в классе - C++
Пытаюсь инициализировать в классе переменную и дальше ее использовать class Lines { double PI = 3.141592653589793238462; void...

Инициализация глобальной переменной - C++
Здравствуйте, мне необходимо в программе по решению СНАУ добавить возможность задавать коэфициенты при неизвестных вводом через консоль. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
25.12.2012, 11:38 #2
зачем? Какой смысл каждому объекту добавлять константное поле?
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
25.12.2012, 11:38 #3
Вариант 1: пишем конструктор, инициализируем в нем.
Вариант 2: инициализируем при создании объекта Triangle t = {0, 0, 0, "tr"};
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
25.12.2012, 11:53  [ТС] #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
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
25.12.2012, 11:56 #5
Цитата Сообщение от Flurry Посмотреть сообщение
Это я потом буду переменные создавать разных типов треугольник, квадрат, круг. У всех будет name[] чтобы узнать к какому типу принадлежит переменная
А-ха-ха. Открой для себя наследование, полиморфизм и виртуальные функции
Flurry
0 / 0 / 0
Регистрация: 25.12.2012
Сообщений: 9
25.12.2012, 12:02  [ТС] #6
Сейчас наследование я не знаю. Надо конструктор написать для этой структуры. Как правильно сделать?
gray_fox
What a waste!
1511 / 1214 / 69
Регистрация: 21.04.2012
Сообщений: 2,550
Завершенные тесты: 3
25.12.2012, 12:15 #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  [ТС] #8
gray_fox , спасибо!
gray_fox
What a waste!
1511 / 1214 / 69
Регистрация: 21.04.2012
Сообщений: 2,550
Завершенные тесты: 3
25.12.2012, 12:32 #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  [ТС] #10
Цитата Сообщение от gray_fox Посмотреть сообщение
Плохая идея.
Плохо это то, что каждая переменная будет больше места занимать из-за того что содержит строку name?
gray_fox
What a waste!
1511 / 1214 / 69
Регистрация: 21.04.2012
Сообщений: 2,550
Завершенные тесты: 3
25.12.2012, 13:10 #11
Цитата Сообщение от Flurry Посмотреть сообщение
Плохо это то, что каждая переменная будет больше места занимать из-за того что содержит строку name?
Нет, просто сам факт того, что у тебя есть некие данные\методы для определения типа обычно (но не всегда, конечно) означает, что проектирование кривовато. Как правило полиморфизма достаточно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2012, 13:10
Привет! Вот еще темы с ответами:

вызов метода, инициализация переменной - C++
есть метод M( ) int M(int &a) - как его теперь вызвать?

Инициализация переменной в пространстве имён - C++
в моём пространстве имён d3d есть 2 переменные, которые я определяю в самом пространстве HWND m_hwnd = 0; HINSTANCE m_hinst = 0; в...

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

Инициализация переменной в шаблонном классе - C++
Как правильно инициализировать шаблонную переменную в классе? Т.е. есть ли какая разница между x() и x( T() ) ? 1-й вариант ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.12.2012, 13:10
Ответ Создать тему
Опции темы

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