2014-02-21 3 views
0

У меня есть эти файлы (упрощенная версия)Использование глобального экземпляра класса другой глобальной переменной в другом файле

ах

class A 
{ 

public: 
    A(int){} 

int operator [](int a){return a;} 
}; 

A a(2); 

main.cpp

#include<a.h> 

class B 
{ 
public: 
    B(int){} 
}; 

B b(a[2]); 

int main() 
{ 
    //use b here... 
} 

Q: Могу ли я используйте вышеуказанный код? Это правильно?!

ответ

0

Код выше (почти) компилируется, но, вероятно, он не делает то, что вы ожидаете. Пара вопросов. , ,

  1. #include<a.h>, вероятно, следует #include "a.h" если хиджры находится в том же каталоге, что и main.cpp.

  2. B b(a[2]) может создать новый экземпляр класса A, вместо того, чтобы использовать тот, который вы определили в a.h. Добавьте extern A a;, прежде чем использовать a, чтобы сообщить вашему компилятору, что вы хотите использовать a, объявленный в другом файле.

И, наконец, в зависимости от вашего приложения иногда можно переопределить глобальные переменные. Если это уместно, подумайте об использовании инкапсуляции вместо глобальных переменных. Что-то вроде

Class B { 

public: 
    B(int i){} 

private: 
    A a(); // Or extern A a; 
}; 

Будет работать, если вам нужен только доступ к a от b.

Смежные вопросы