2012-05-14 2 views
3

Моя проблема заключается в следующем контексте:глобальная переменная декларация с экстерном

file1.h

#include "graphwnd.h" 
#include "file2.h" 

class XXX: 
{ 
....various things.... 
protected: 
CGraphWnd graph_wnd_sensor1D; 
} 

file1.cpp

#include "file1.h" 
(... various stuff ...) 

void main(){ 
OnInitGraph(&graph_wnd_1_sensor2D, rect_1_sensor2D); 
graph_wnd_sensor1D.ShowWindow(SW_HIDE); 
myYYY.Init(); 
} 
(... various stuff ...) 

здесь graph_wnd_sensor1D имеет значение и ShowWindow работы

файл 2.h

extern CGraphWnd graph_wnd_sensor1D; 
class YYY: 
{ 
void YYY::Init(){ 
graph_wnd_sensor1D.ShowWindow(SW_SHOW); 
} 
....various things.... 
} 

Здесь, в инициализации, то приложение падает, потому что graph_wnd_sensor1D имеет не ту же информацию, что и предыдущий.

В файле 2.cpp Я хочу использовать graph_wnd_sensor1D. Но визуальные выходы

CMyTabCtrl.obj : error LNK2001: external symbol unresolved "class CGraphWnd graph_wnd_sensor1D" 
  • Так что идея состоит в том, чтобы получить graph_wnd_sensor1D быть глобальной переменной, которая объявлена ​​в file1! Как я могу это решить? *

ответ

6

Вы только объявили, но не определили переменную. Добавьте определение в один файл реализации.

файл 2.h

extern CGraphWnd graph_wnd_sensor1D; // declarations 

файл файле 2.cpp

CGraphWnd graph_wnd_sensor1D; // definition 
+0

aoch бить меня к нему. +1 – Martol1ni

+0

Используя это, он наверняка компилируется, но graph_wnd_sensor1D не имеет значения, которое установлено в файле file1.cpp – djfoxmccloud

+0

@djfoxmccloud, откуда вы знаете? Вы выводите? У вас есть другая локальная переменная с тем же именем? Вы что-то заново декларируете? –