Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2012, 20:18   #1
marauder1919
Пользователь
 
Регистрация: 05.08.2012
Сообщений: 14
По умолчанию Обработка массива в цикле

Код:
int choise4;
    cin>>choise4;
    if(choise4==1) {
                   ofstream chrtable("E:\CharTable.txt",ios::out);
                   }
        char *chrmassive = new char[1024];                                      // Массив
    for(code=1;code<=dst;code++) {
          sbl=code;
          cout<<"\t\t"<<code<<"\t"<<sbl<<"\n";
          chrmassive<<"\t\t"<<code<<"\t"<<sbl<<"\n";             //Обработка массива
          if(choise4==1) {
                         chrtable<<"\t\t"<<code<<"\t"<<sbl<<"\n";
                         };
          }
Создаю массив символов, цель - за каждое повторение цикла дописывать туда данные. Но тут ошибка
invalid operands of types `char*' and `const char[3]' to binary `operator<<'
Как ето исправить?

Объясните подробнее про ошибку undeclared (first use this function)
В зависимости от выбора я хочу создавать или нет файловую переменную chrtable. Но при создании из конструкции if ее не видно программе. Ошибка `chrtable' undeclared (first use this function) Все норм если сделать без if, просто
Код:
ofstream chrtable("E:\CharTable.txt",ios::out);
но какбы зачем зря создавать файл если пользователь может его и не запросить..

Последний раз редактировалось marauder1919; 09.08.2012 в 20:23.
marauder1919 вне форума Ответить с цитированием
Старый 09.08.2012, 20:40   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

У каждого объекта есть область видимости. Если он был объявлен в некотором блоке кода, то только там он и будет доступен (если, конечно, это не возвращаемое значение функции или что-нибудь подобное). Вы объявили и инициализировали chrtable в блоке if, там переменная и будет доступна.
Сделайте, например, так:
Код:
ofstream chrtable;
if (...) {
  chrtable.open("...");
}
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 10.08.2012, 19:11   #3
marauder1919
Пользователь
 
Регистрация: 05.08.2012
Сообщений: 14
По умолчанию

Тогда еще вопрос: можно ли обьявить тот же массив chrmassive или файловую переменную chrtable через идентификатор глобальной памяти static, extern, или volatile? И сделать ето именно через конструкцию if?
A что вообще кроме простых переменных можно через них объявлять?

Цитата:
Сообщение от Granus Посмотреть сообщение
У каждого объекта есть область видимости. Если он был объявлен в некотором блоке кода, то только там он и будет доступен (если, конечно, это не возвращаемое значение функции или что-нибудь подобное). Вы объявили и инициализировали chrtable в блоке if, там переменная и будет доступна.
Сделайте, например, так:
Код:
ofstream chrtable;
if (...) {
  chrtable.open("...");
}
С файловой переменной тут всё хорошо, хоть она и обьявлена но если не надо то я и не инициализирую ее и не гружу память. А вот если обьявить массив на полгига, взять в памяти столько места на него а потом не обработать? Оперативка то не резиновая.

Последний раз редактировалось marauder1919; 10.08.2012 в 19:16.
marauder1919 вне форума Ответить с цитированием
Старый 10.08.2012, 19:28   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от marauder1919 Посмотреть сообщение
С файловой переменной тут всё хорошо, хоть она и обьявлена но если не надо то я и не инициализирую ее и не гружу память. А вот если обьявить массив на полгига, взять в памяти столько места на него а потом не обработать? Оперативка то не резиновая.
Память под автоматические переменные выделяется на стеке функции.
Когда функция запускается, то для её стека уже выделено столько памяти, что бы гарантированно вместить все автоматические переменные, имеющие место быть в туловище данной функции.

Таким образом, запихав создание объекта в отдельную ветку блока-if, ты не сэкономил память на стеке.

Ты потратил столько же памяти, сколько было бы потрачено, если бы созданная переменная имела область видимости всего пространства имен данной функции.

Если тебя так парит экономия памяти для массивов, то к твоим услугам динамическая память, и работа с указателями.

Последний раз редактировалось _Bers; 10.08.2012 в 19:35.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
инициализация массива, вывод массива и обработка массива должны быть реализованы с помоshью функций airesjke Помощь студентам 0 02.03.2012 16:14
Обработка нажатия клавиш в цикле mLight Общие вопросы Delphi 4 05.11.2011 19:03
чтение массива в цикле Игорь Кулакевич Помощь студентам 3 01.11.2011 15:36
Пропустить элемент массива в цикле foreach по условию. %$PROregRAMi$t% PHP 0 21.09.2010 06:53
Использование массива в цикле motorway Microsoft Office Excel 4 17.08.2009 21:13