Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/68: Рейтинг темы: голосов - 68, средняя оценка - 4.84
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
1

Массивы в заголовочных файлах

20.03.2011, 16:58. Показов 12338. Ответов 41
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в заголовочном файле в описании класса пишу:


C++
1
int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
В итоге компилятор подчёркивает знак '=' и выдает ошибки:

Error 1 error C2059: syntax error : '{' c:\users\dimarik\desktop\lalala\lal ala\file.h 15
Error 2 error C2334: unexpected token(s) preceding '{'; skipping apparent function body c:\users\dimarik\desktop\lalala\lal ala\file.h 15
Error 3 error C2059: syntax error : '{' c:\users\dimarik\desktop\lalala\lal ala\file.h 15
Error 4 error C2334: unexpected token(s) preceding '{'; skipping apparent function body c:\users\dimarik\desktop\lalala\lal ala\file.h 15

Можно ли в заголовочном файле создать массив констант?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2011, 16:58
Ответы с готовыми решениями:

Про добавление заголовочных файлов в заголовочных файлах
В который раз эта вещь засовывает мозги в блендер! Я про то, что не могу однозначно запомнить...

О стандартных заголовочных файлах
Не знаю в какую категорию отнести данное нубство, но все же: Часто использую некоторые...

Константы в заголовочных файлах
declare.h #pragma once extern const size_t rows; extern const size_t cols; double...

Линковка, реализация в заголовочных файлах
Ситуация следующая. Представим себет хедер, который содержит некоторый функционал и должен...

41
1552 / 918 / 193
Регистрация: 26.03.2010
Сообщений: 3,105
20.03.2011, 17:00 2
delll
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
20.03.2011, 17:02 3
объяви его в С
а в заголовочном файле опиши внешним extern

Добавлено через 1 минуту
или может тебе подойдет enum
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:03 4
Цитата Сообщение от Dimarik__ Посмотреть сообщение
Можно ли в заголовочном файле создать массив констант?
Можно, но по-хорошему так не делают. Ошибка у тебя из-за чего-то другого. Покажи код на несколько строк выше и ниже этого места (или лучше вообще весь код)
1
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
20.03.2011, 17:05 5
Цитата Сообщение от neske Посмотреть сообщение
CodeBlocks компилирует без проблем
судя по ошибкам
этот заголовок подключен к нескольким файлам
==двойное определение
1
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:10  [ТС] 6
Цитата Сообщение от Evg Посмотреть сообщение
Можно, но по-хорошему так не делают. Ошибка у тебя из-за чего-то другого. Покажи код на несколько строк выше и ниже этого места (или лучше вообще весь код)
ошибка в этом, потму что до добавления этого массива в файл, всё нормально работало. Двойного определения нет, потому что стоит защита в виде #ifndef....
Мне нужен массив, который будет являться private и который не будет переопределяться в классе. Я читал в литературе, если мы не будем изменять содержимое переменных, необходимо определять её как константу. Здесь аналогично то же самое или как? Как правильно надо делать?
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
20.03.2011, 17:35 7
давай по порядку
Цитата Сообщение от Dimarik__ Посмотреть сообщение
защита в виде #ifndef
не всегда спасает отца "русской демократии"
на лицо кросс-определения когда два блока лезут к одному определению
Цитата Сообщение от Dimarik__ Посмотреть сообщение
Мне нужен массив, который будет являться private
он является членом класса??

и чем тебе enum не угодил?

Добавлено через 17 минут
Цитата Сообщение от Dimarik__ Посмотреть сообщение
определять её как константу
у тебя нет определение константы const
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:35 8
Цитата Сообщение от ValeryS Посмотреть сообщение
и чем тебе enum не угодил?
А с какого перепугу там вообще enum должен быть? Не говоря уж о том, что человек спрашивает о причинах конкретной проблемы, а не о том, как её затоптать
1
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:36  [ТС] 9
не всегда спасает отца "русской демократии"
на лицо кросс-определения когда два блока лезут к одному определению
В смысле?

он является членом класса??
Да.
и чем тебе enum не угодил?
То есть такое через массивы сделать не вариант и нужен обязательно enum? С массивами просто привычнее
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:36 10
Dimarik__, пока ты не покажешь нормально исходник, разговор, скорее всего, будет довольно беспредметным
1
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:37  [ТС] 11
нет определения как const - это я код криво скопировал.
C++
1
const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:39 12
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dimarik__ Посмотреть сообщение
Да
Вот показал бы исходник - сразу бы тебе ответили на вопрос. Внутри класс у тебя описываются ПОЛЯ класса, а не глобальные переменные. Класс - это описание типа, а потому он не может содержать данных

Добавлено через 1 минуту
Файл *.h:

C++
1
2
3
4
class T
{
  static const int arr[4];
};
Файл *.cpp:

C++
1
const int T::arr[4] = { 1, 2, 3, 4 };
1
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:40  [ТС] 13
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifndef file
#define file
#include <string>
#endif
using namespace std;
 
class Cryptograph
{
    private:
        string _sText;
 
 
    const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
 
 
        /////////////////////////////////////////////////
        //Методы
        ////////////////////////////////////////////////////
        void convertStringTo3dArray(string &str_1, unsigned char *** array_1,
            unsigned char *** array_2, unsigned long long a, int b, int c);
 
        
    public:
        Cryptograph(char* cText, char* cKey);//конструктор
 
};
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:41 14
Dimarik__, в посте 12 уже написал
1
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:43  [ТС] 15
А почему когда я пишу
C++
1
static const int const_int_charsInBlock = 16;//из скольки символов будет стостоять блок
всё работает нормально, а когда пишу
C++
1
static const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
компилятор ругается
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:45 16
Цитата Сообщение от Dimarik__ Посмотреть сообщение
А почему когда я пишу
Одно из раздолбайских свойств языка Си++. Для целочисленных переменных сие разрешено. Из тех соображений, что при любой попытке чтения переменной реально будет подставляться константа. Но адрес вроде бы как взять будет нельзя. Если ты вместо int'а подставишь float, то скорее всего будет ошибка
1
21 / 21 / 3
Регистрация: 29.04.2010
Сообщений: 444
20.03.2011, 17:48  [ТС] 17
C++
1
static const int const_int_charsInBlock = 16;//из скольки символов будет стостоять блок
и ещё. скажи, пожалуйста, почему выше указанной код в этом посте не работал без static?
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:51 18
static означает поле, единое для всех экземпляров данного класса. По сути дела это означает отдельная глобальная переменная, которая доступна только методам данного класса. А без static - это обычное поле структуры или класса. Описание структуры или класса - это описание типа. Оно НЕ является "материальным" (т.е. типу ничего не соответствует в машине). Материальным является лишь объект (переменная или динамически выделенный экземпляр класса). И данными можно инициализировать лишь объект. Когда ты пишешь "static const int qqq = 16;" то почему-то разработчики Си++ порешили, что здесь как бы задаётся не статическое поле класса (т.е. не объект), а константа (т.е. не материальная субстанция)
0
Модератор
Эксперт по электронике
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
20.03.2011, 17:55 19
Цитата Сообщение от Dimarik__ Посмотреть сообщение
То есть такое через массивы сделать не вариант и нужен обязательно enum? С массивами просто привычнее
ну тут дело вкуса мне enum более привычен
хотя зависит от задачи

Цитата Сообщение от Dimarik__ Посмотреть сообщение
static const int _const_iMas[4] = {0x63,0x7c,0x78,0x79};
класс это просто описатель и пока не объявлен хоть один объект в памяти место под класс не выделяется и компилятор просто не может(не знает) куда пихать твои константы.


Цитата Сообщение от Dimarik__ Посмотреть сообщение
static const int const_int_charsInBlock = 16;
по моему делать так тоже не рекомендуется
0
Evg
Эксперт CАвтор FAQ
21279 / 8301 / 637
Регистрация: 30.03.2009
Сообщений: 22,659
Записей в блоге: 30
20.03.2011, 17:57 20
Цитата Сообщение от ValeryS Посмотреть сообщение
ну тут дело вкуса мне enum более привычен
И как через enum будет выражаться "_const_iMas[i+1]"?
0
20.03.2011, 17:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2011, 17:57
Помогаю со студенческими работами здесь

Определение переменных в заголовочных файлах
Здорова! Определил переменную в заголовочном фале от так #pragma once #ifndef...

Статические свойства структур в заголовочных файлах
Всем привет. Не могу найти в интернете инфу о том, как ведут себя статические свойства структур...

Расположение определения функций в заголовочных файлах
grizlik78, Часто вижу что приватную секцию указывают внизу, интересно, зачем? Вроде удобнее...

Странные объявления функций в заголовочных файлах
Пытаюсь потихоньку разобраться в C++. Когда читаешь теорию, почти все понятно, но когда лезешь в...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru