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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2007, 01:16   #1
bat
Новичок
Джуниор
 
Регистрация: 22.08.2007
Сообщений: 2
По умолчанию почему-то в подключаемом модуле не видно глобальную переменную

вот взялся за изучение с++ и сразуже почти возникла проблема
почемуто в подключаемом модуле не видно глобальную переменную
вот ВЕСЬ текст второго модуля (unit2.cpp)
Цитата:
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit1.h"
#pragma package(smart_init)
int testint2()
{ return rows; }
Это ВЕСЬ заголовочный файл (unit2.h):
Цитата:
#ifndef Unit2H
#define Unit2H
int rows;
int testint2();
#endif
вот вырезка из основного модуля (unit1.cpp):
Цитата:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
. . . .
void __fastcall TForm1::Button2Click(TObject *Sender)
{
rows=100;
Button2->Caption=testint2();
}
ну собственно это все. если все правильно сделано, то функция testint2 просто должна возвращать значение глобальной переменной rows..
но почему-то в первом модуле при нажатии кнопки текст меняется на 0 а не на 100, Хотя при дебаге переменная rows отображается как 100
или я что-то не подключил? надо ли про подключаемые модули както упоминать в заголовочных файлах?
bat вне форума Ответить с цитированием
Старый 22.08.2007, 08:57   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

В unit2.h и unit1.cpp нужна строчка

extern int rows;
Carbon вне форума Ответить с цитированием
Старый 22.08.2007, 09:26   #3
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

А вообще не советую делать переменные глобальными. Лучше сделать 2 функции: чтения и записи.
Carbon вне форума Ответить с цитированием
Старый 22.08.2007, 18:40   #4
bat
Новичок
Джуниор
 
Регистрация: 22.08.2007
Сообщений: 2
По умолчанию

вроде сделал как сказали, но пишет ошибку:
unresolved external '_rows' referenced from '...\unit1.obj'
bat вне форума Ответить с цитированием
Старый 23.08.2007, 14:25   #5
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Тогда ставим в первом модуле:

Код:
static int rows;

int GetRows()
{return rows;}

void SetRows(int new_rows)
{rows=new_rows;}
А в остальных убираем все намёки на переменную из первого модуля и пользуемся функциями.
Carbon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать, чтобы процес небыло видно в Диспетчере задач? HunterMan Win Api 1 25.06.2008 21:34
Не видно комп в сети rexec Операционные системы общие вопросы 7 21.06.2008 00:04
НЕ видно второй БД, Базы подключаются через bpl. HunterPC БД в Delphi 0 02.11.2007 12:58
Turbo C:не видно результат. Trewert Помощь студентам 5 07.09.2007 00:10
FHandle - говорит что нет, хотя эта же процедура успешно работает в модуле Dialogs, о mrandrey Общие вопросы Delphi 2 08.06.2007 15:21