//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
Подскажите, пожалуйста, что делать. Заранее благодарен.
- Подключить хидер класса
- Объявить экземпляр класса
- Инициализировать экземпляр класса
- Непосредственно работа с классом
- Удаление экземпляра класса
Объявлен но не определен статический член класса 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
#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;
#include "Global.h"
int Global::CurrentComp;
Код:
//MainUnit.cpp
#include "Global.h"
Global::SetCurrentComp(2);
#include "Global.h"
Global::SetCurrentComp(2);
- Подключить хидер класса
- Объявить экземпляр класса
- Инициализировать экземпляр класса
- Непосредственно работа с классом
- Удаление экземпляра класса
2,3 и 5 пункты не нужны.
- Подключить хидер класса
- Объявить экземпляр класса
- Инициализировать экземпляр класса
- Непосредственно работа с классом
- Удаление экземпляра класса
Инициализировать экземпляр класса, имеется ввиду через SetCurrentComp ?
Большое спасибо за помощь. Все работает! Кстати, не подскажите, есть в Builder станадартный класс для работы с временем (начинать отсчет с нуля, начинать, допустим с 5 минут идти до нуля, вывод времени (часы:минуты) в формате AnsiString)?
Тоесть когда ты напишешь
Код:
Global MyObject;
То вызовиться тот код, который будет находиться вот тут:
Код:
Global::Global()
{
...
}
{
...
}
Там ты можешь не использовать SetCurrentComp, а можешь сразу написать: CurrentComp = 0;
...[/QUOTE]
набери в Билдере TDateTime и нажми F1...:cool:
Тоесть когда ты напишешь
Код:
Global MyObject;
[/QUOTE]
Давай начнем с того, что этот код не скомпилируется.
В примере @leX никакого экземпляра класса не создается и не должно создаваться. Именно поэтому конструктор закрытый.