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

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

Войти
Регистрация
Восстановить пароль
 
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
#1

Не получается глобально... - C++

13.11.2011, 12:53. Просмотров 395. Ответов 8
Метки нет (Все метки)

Здравствуйте. Сразу к вопросу.
Вот написала вот такой код чтения числа из бинарного файла, все прекрасно работает, но вопрос вот в чем, почему когда я пытаюсь записать инструкцию fileName[32][0] = "data.bin"; не в майне, а в глобальных объявлениях, происходит ошибка.
Вот программа:

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
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <stdio.h>
 
void Load( const char* fileName );
 
int i;
FILE* file;
const char* fileName[32][256]; // 256 шт и все по 32
//----->  хочу поставить здесь fileName[32][0] = "data.bin";
 
//---------------------------------------
// Name: main()
// Desc: main, функция main...
//---------------------------------------
int main(int argc, char *argv[] )
{
    fileName[32][0] = "data.bin"; // как убрать из майна?
 
    Load( fileName[32][0] );
 
    system( "pause" );
    return 0;
}
 
//---------------------------------------
// Name: Load()
// Desc: открывает бин.файл, читает в
//       нем число и выводит на экран
//---------------------------------------
void Load( const char* fileName )
{
    file = fopen( fileName, "rb");
    fread( &i, sizeof(int), 1, file );
    printf( "%i \n", i );
    fclose( file );
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2011, 12:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не получается глобально... (C++):

Как объявить ofstream глобально - C++
хочу чтобы не только в main но и во всех ф-ях было доступно ofstream fout(&quot;out.txt&quot;); задаю эту штуку глобально ошибка

Как объявить переменную глобально? - C++
здравствуйте, в книге шилдта есть такой код #include &lt;iostream&gt; using namespace std; void func1(); void func2(); int count;...

Как глобально объявить массив не заданной размерности - C++
Цель: при нажатии на button1 создается массив и заполняется рандомными числами, длину массива получаем из TextBox1. А при нажатии на...

Почему нельзя объявить динамический массив глобально - C++
вот код #include &lt;iostream&gt; #include &lt;string&gt; int w = 0; string *s = new string ; using namespace std; int main { ...

не видны переменные и объекты которые глобально объявлены в классе - C++
Здравствуйте. У меня следующая проблема: Делал прогу месяц назад, но по причине отъезда ее забросил. Сейчас на другом компе...

Как глобально объявить указатель структуры, и переменные хранящиеся в ней? - C++
Как глобально объявить указатель структуры, и переменные хранящиеся в ней? Вот указатель вроде объявил, но всё же есть ошибки. #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
13.11.2011, 13:35 #2
В общем тут сложно объяснить, но суть в том, что инициализация глобальных переменных должна быть в той же строке, что и объявление. Например:
C++
1
2
3
//global scope
int i;
i=5;
привет к такой же ошибки, как у тебя.
а так:
C++
1
2
//global scope 
int i = 5;
будет правильно.
Если в двух словах, то компилятор делает отдельную функцию для инициализации глобальных переменных. Сначала он видит строку
C++
1
const char* fileName[32][256];
и видит, что массиву не присвено ни каких значений, поэтому он создает код для заполнения массива нулями (глобальные переменные инициализируются нулями по умолчанию). Потом видит строку:
C++
1
fileName[32][0] = "data.bin";
и тут у него случается когнитивный диссонас, он думает :"какого хера, я же только что создал функцию для заполнения этого массива нулями, что тут делает эта строка?" И ругается на нее!

Добавлено через 6 минут
Вот статья не по теме, но там есть небольшое объяснение этого момента.
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2011, 13:42  [ТС] #3
А когда я вот так делаю тоже диссонанс?
C++
1
const char* fileName[32][256] = { "data.bin", "data1.bin", "data2.bin", "data3.bin", "data4.bin" };
Компилируется, но программа вылетает с ошибкой.
Все дата.бин на месте.
0
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
13.11.2011, 13:47 #4
programina, 256 - это для символов или как?
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2011, 13:49  [ТС] #5
256 - это число элементов в массиве, каждый элемент по 32
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
13.11.2011, 13:54 #6
Цитата Сообщение от programina Посмотреть сообщение
Компилируется, но программа вылетает с ошибкой.
ошибка похоже здесь:
C++
1
Load( fileName[32][0] );
выход за пределы массива.
0
Евгений М.
1035 / 976 / 54
Регистрация: 28.02.2010
Сообщений: 2,829
Завершенные тесты: 2
13.11.2011, 13:57 #7
Цитата Сообщение от programina Посмотреть сообщение
256 - это число элементов в массиве


Ладно по другому задам вопрос. По идее программа будет открывать 32 файла или 32*256 файлов?
1
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
13.11.2011, 14:05 #8
Да, тоже есть ощущение, что должно быть как то так:
C++
1
2
3
const char* fileName[32]= { "data.bin", "data1.bin", "data2.bin", "data3.bin", "data4.bin",/*...*/, "data31.bin" };
//...
Load( fileName[0] );
1
programina
1914 / 599 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
13.11.2011, 15:04  [ТС] #9
Спасибо вам Евгений М. и Kastaneda
Переписала вот так, все работает и все дата.бины вне майна

C++
1
2
3
4
5
6
7
const char* fileName[256]= { "data.bin", "data1.bin", "data2.bin", "data3.bin", "data4.bin", "data5.bin" };
 
int main()
{
    Load( fileName[0] );
 
    // ...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2011, 15:04
Привет! Вот еще темы с ответами:

Как передать в функцию указатель на структуру, если эта структура не определена глобально? - C++
Проблема заключается в следующем: предположим есть некая структура, которая была определена внутри функции main. Далее я допустим хочу...

Как завести вектор и структуру глобально в заголовочном файле или в чем ошибка - C++
Создал заголовочный файл Globals.h. В нем объявляется структура и вектор из структур. #ifndef _Globals_ #define _Globals_ #include...

Как локальную переменную сделать глобально, при это сохранив накопленное в ней значение? - C++
Ребята, помогите, пожалуйста. Вот, например, есть такой код: for (int i=0; i&lt;10; ++i) { /* здесь делается что-то полезное */...

переменную глобально - PHP
Привет! У меня вот вопрос.. Каким образом можно правильно использовать переменные которые нужны в других классах, методах? Например, у...


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

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

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