Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Глобальные параметры

12K
15 июня 2006 года
@leX
21 / / 14.06.2006
Подскажите, пожалуйста, в чем проблема.
Код:
//Globla.cpp
class Global
{
        private:
                static int CurrentComp;
                Global();

        public:
                static void SetCurrentComp(int n) {CurrentComp = n;}
                static int GetCurrentComp() {return CurrentComp;}
};

//MainUnit.cpp
#include "Global.cpp"
//...

int temp = 2;
Global::SetCurrentComp(temp);

Это вызывает ошибку: [Linker Error] Unresolved external 'Global::CurrentComp' referenced from E:\TASKS\COMPENGINE\CLUBBUILDER\MAINUNIT.OBJ
Подскажите, пожалуйста, что делать. Заранее благодарен.
335
15 июня 2006 года
enola
379 / / 25.01.2005
  1. Подключить хидер класса
  2. Объявить экземпляр класса
  3. Инициализировать экземпляр класса
  4. Непосредственно работа с классом
  5. Удаление экземпляра класса
3
15 июня 2006 года
Green
4.8K / / 20.01.2000
Линкер же сказал тебе в чем проблема.
Объявлен но не определен статический член класса CurrentComp.
Добавь в .cpp строку:
int Global::CurrentComp;

Еще следует разносить определение и реализацию класса по .h и .cpp файлам соотв-но, и подключать именно .h файлы.

Т.о. надо бы сделать так:
Код:
//Global.h
#ifndef GLOBAL_H
#define GLOBAL_H

class Global
{
        private:
                static int CurrentComp;
                Global();

        public:
                static void SetCurrentComp(int n) {CurrentComp = n;}
                static int GetCurrentComp() {return CurrentComp;}
};

#endif //GLOBAL_H

 
Код:
//Global.cpp
#include "Global.h"

int Global::CurrentComp;

 
Код:
//MainUnit.cpp
#include "Global.h"

Global::SetCurrentComp(2);
3
15 июня 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=enola]
  1. Подключить хидер класса
  2. Объявить экземпляр класса
  3. Инициализировать экземпляр класса
  4. Непосредственно работа с классом
  5. Удаление экземпляра класса
[/QUOTE]
2,3 и 5 пункты не нужны.
12K
15 июня 2006 года
@leX
21 / / 14.06.2006
[QUOTE=enola]
  1. Подключить хидер класса
  2. Объявить экземпляр класса
  3. Инициализировать экземпляр класса
  4. Непосредственно работа с классом
  5. Удаление экземпляра класса
[/QUOTE]

Инициализировать экземпляр класса, имеется ввиду через SetCurrentComp ?
12K
15 июня 2006 года
@leX
21 / / 14.06.2006
Большое спасибо за помощь. Все работает! Кстати, не подскажите, есть в Builder станадартный класс для работы с временем (начинать отсчет с нуля, начинать, допустим с 5 минут идти до нуля, вывод времени (часы:минуты) в формате AnsiString)?
13K
15 июня 2006 года
Dr_C++
40 / / 07.06.2006
Инициализация экземпляра класса производиться по средством конструктора. В твоем случае: Global();
Тоесть когда ты напишешь
 
Код:
Global MyObject;


То вызовиться тот код, который будет находиться вот тут:
 
Код:
Global::Global()
{
...
}


Там ты можешь не использовать SetCurrentComp, а можешь сразу написать: CurrentComp = 0;
13K
15 июня 2006 года
Dr_C++
40 / / 07.06.2006
[QUOTE=@leX]есть в Builder станадартный класс для работы с временем
...[/QUOTE]

набери в Билдере TDateTime и нажми F1...:cool:
3
15 июня 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=Dr_C++]Инициализация экземпляра класса производиться по средством конструктора. В твоем случае: Global();
Тоесть когда ты напишешь
 
Код:
Global MyObject;

[/QUOTE]
Давай начнем с того, что этот код не скомпилируется.
В примере @leX никакого экземпляра класса не создается и не должно создаваться. Именно поэтому конструктор закрытый.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог