Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где объявлять переменные? до TForm, в ней или обработчике? 
:(
    Опции темы
Gunslinger
Дата 16.12.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Привет!
Вот шмат кода:
Код

TForm1 *Form1;
ToExcel Exl;
Cells s;       
String File_Path;  //
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  Cells cell_data; 
  Cells cell_firstField; 
  Cells cell_firstNumField; 
  Cells cell_lastField; 
  Cells cell_lastNumField; 
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Exl;Exl=File_Path;
    cell_data.SetA("M3"); cell_data=Exl.ExtractValue(cell_data); cell_data.Convert_to_str();
    cell_firstField; cell_firstField.SetA("A10"); cell_firstField=Exl.ExtractValue(cell_firstField); cell_firstField.Convert_to_str();

Непонтка: в таком варианте выдает ошибку на оба селла [C++ Error] Unit1.cpp(34): E2451 Undefined symbol 'cell_data'
Если вынести объявления перед TForm - ошибки нет. Объявления в TForm - ошибки.
В обработчике подписать Cells - все равно ошибка.

Работает, только 

Это сообщение отредактировал(а) Gunslinger - 16.12.2008, 10:36
PM MAIL   Вверх
smoke_man
Дата 16.12.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Определись с областью видимости твоих переменных.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
Artemon
Дата 16.12.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Переменные, объявленные внутри функции (или методе), не видны в других функциях (или методах)

Это сообщение отредактировал(а) Artemon - 16.12.2008, 13:04


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
KTatsu
Дата 16.12.2008, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 23.8.2008
Где: Москва

Репутация: 1
Всего: 1



Код

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int a=0;                                                 // Переменная "а"
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)     // Клик по кнопке Button1
{
a = a+1;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)     // Клик по кнопке Button2
{
int b=3;                                               // Переменная "b"
Label1->Caption=IntToStr(a+b);
}

Таким образом, переменная "а" будет существовать во всей программе, а "b" - только в обработке события клика по кнопке "Button2".

Это сообщение отредактировал(а) KTatsu - 16.12.2008, 13:25
PM MAIL   Вверх
mrbrooks
Дата 16.12.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Gunslinger @  16.12.2008,  10:25 Найти цитируемый пост)
Объявления в TForm - ошибки.

не верю. здается мне что кое кто просто кое что не заинкдюил в хедаре формы.

Цитата(smoke_man @  16.12.2008,  11:06 Найти цитируемый пост)
Определись с областью видимости твоих переменных. 

 smile 

Цитата(KTatsu @  16.12.2008,  13:22 Найти цитируемый пост)
Таким образом, переменная "а" будет использоваться во всей программе

глобальные переменные - зло.
PM MAIL   Вверх
KTatsu
Дата 16.12.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 23.8.2008
Где: Москва

Репутация: 1
Всего: 1



Я просто пример привел, но ведь иногда они все равно могут потребоваться smile
PM MAIL   Вверх
mrbrooks
Дата 16.12.2008, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



KTatsu, могут. Но для этого - что бы было все кошерно - стоит использовать свое пространство имен, либо свой класс (структуру) где они хранятся smile 

Это сообщение отредактировал(а) mrbrooks - 16.12.2008, 13:37
PM MAIL   Вверх
Alca
Дата 16.12.2008, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Переменную можно использовать как член класса:
Код

class TfrmMain : public TForm {
    //...
private:
    m_a;
    m_b;
    //...
}


Это сообщение отредактировал(а) Alca - 16.12.2008, 13:39


--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 16.12.2008, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Alca, 
Цитата(Gunslinger @  16.12.2008,  10:25 Найти цитируемый пост)
Объявления в TForm - ошибки.

то что он в курсе об этом подходе - это факт. но то что он не подключил к хидару модуль со своим классом - это тоже факт.

PM MAIL   Вверх
Gunslinger
Дата 16.12.2008, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



Цитата(mrbrooks @  16.12.2008,  13:41 Найти цитируемый пост)
не подключил к хидару модуль со своим классом

Вот все хедеры, которые были:
Код

#include <vcl.h>
#pragma hdrstop
#include<comobj.hpp>
#include "Unit1.h"
#include "Cells.h"
#include "ToExcel.h"
#include "ToDBF.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
ToExcel Exl;

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

TForm1 *Form1;
ToExcel Exl;
Cells cell_data;
String File_Path; 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Exl;Exl=File_Path;
    cell_data.SetA("M3"); cell_data=Exl.ExtractValue(cell_data); cell_data.Convert_to_str();
    Cells cell_firstField; cell_firstField.SetA("A10"); cell_firstField=Exl.ExtractValue(cell_firstField); cell_firstField.Convert_to_str();

Когда пишу так:
Код

TForm1 *Form1;
ToExcel Exl;
String File_Path; 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Exl;Exl=File_Path;
   Cells cell_data.SetA("M3"); cell_data=Exl.ExtractValue(cell_data); cell_data.Convert_to_str(); //1
    Cells cell_firstField; cell_firstField.SetA("A10"); cell_firstField=Exl.ExtractValue(cell_firstField); cell_firstField.Convert_to_str();//2!!!

выдает ошибки: [C++ Error] Unit1.cpp(34): E2108 Improper use of typedef 'Cells', [C++ Error] Unit1.cpp(34): E2379 Statement missing ;, [C++ Error] Unit1.cpp(34): E2451 Undefined symbol 'cell_data'. Но ведь строка 2 объявлена в том же обработчике и при этом ошибок не возникает.

-----------
Поставил:
Код

Cells cell_data;/* а затем*/cell_data.SetA("M3"); cell_data=Exl.ExtractValue(cell_data); cell_data.Convert_to_str();

Похоже с конструктором Cells намутил... Это пока оставлю, вопрос: какая разница, где объявлять: в TForm или до нее. Про объявление в обработчике - это, я полагаю, тоже самое, что и объявление в функции.

з.ы. не обращайте внимание, что пост такой длинный. В следующий раз опубликую свою автобиографию в кратком изложении. smile 

Это сообщение отредактировал(а) Gunslinger - 16.12.2008, 17:12
PM MAIL   Вверх
mrbrooks
Дата 16.12.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Gunslinger, камрад я говорю подключить твой модуль с классом не к файлу реализации а к файлу описания - то бишь к *.h и тогда можешь смело описывать переменные в классе формы.
PM MAIL   Вверх
Gunslinger
Дата 16.12.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



mrbrooks, Unit1.h?
PM MAIL   Вверх
mrbrooks
Дата 16.12.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Gunslinger @  16.12.2008,  17:14 Найти цитируемый пост)
mrbrooks, Unit1.h? 

точно!
PM MAIL   Вверх
Gunslinger
Дата 16.12.2008, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 842
Регистрация: 30.12.2006
Где: Астрахань

Репутация: нет
Всего: 3



писанул в юнит1.h:
Код

#include"Cells.h"
#include"ToExcel.h"
#include"ToDBF.h"

безрезультатно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0578 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.