extern и forward declaration
От: musix Россия  
Дата: 23.05.10 15:36
Оценка:
Всем привет!
Подскажите можно ли делать в C++ предварительное определение переменных и объектов классов? Вот например такие классы:
class B;

class A 
{
public:
    A(B* rb){}
};

class B
{
public:
    B(A* ra){}
};


Можно создать глобальные объекты этих классов:
extern B b;
A a(&b);
B b(&a);

void main(void)
{
}


но не получается создать локальные:

void main(void)
{
    extern B b;
    A a(&b);
    B b(&a);
}


Для того, чтобы сделать объявление функции можно написать либо
extern void f(void);
либо просто
void f(void);


потому, что объявление функции и так можно отличить от определения, в отличие от переменных. А для объявления переменной extern обязателен — такое у меня было предположение. Но поэкспериментировав я выяснил, что поторопился с предположением.

Вобщем запутался я немного. Можно ли делать объявления переменных и объектов классов или нет?

Вроде получается, что для глобальных можно:

extern int i;
int * pi = &i;
int i = (int)pi;

void main(void)
{
}

а для локальных нет:

void main(void)
{
   extern int i;
   int * pi = &i;
   int i = (int)pi; // Ошибка: переопределение i
}


Похоже что ответ на мой вопрос отрицательный, но тогда почему? Как мне создать локальные объекты классов A и B?

P.S.: MSDN читал на данную тему, но все равно не все понял ((
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.