problem z przejsciem na visual C++ 2010

problem z przejsciem na visual C++ 2010
liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
0

przeszlem do nowego programu visual C++ 2010 z 2008 i jak otwieram swoj projekt (ktory w 2008 byl odtwarzany) wyskakuje kilkaset bledow typu:
1>objetosci.obj : error LNK2001: unresolved external symbol "float e" (?e@@3MA)

o co mu chodzi??
mam plik nagl.h w ktorym sa te wszystkie zmienne w extern float e; itd. i w tym objetosci.cpp jest #include "nagl.h"

Co ja mam zrobic bo takich bledow mam setki?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

w jednym i tylko jednym pliku .cpp musi być dodatkowo float e; bez extern.

liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
0

Dzięki działa ;-) aczkolwiek nie rozumiem dlaczego, ale to może się w przyszłości dowiem ;-)

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
0

Działa to prosto. extern oznacza, że to definicja zmiennej, jak go nie ma to jest deklaracja zmiennej. FIN

liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
0

deklaracja to np.:

Kopiuj
int i=1; 

definicja to np.:

Kopiuj
int i; 

Dobrze myślę czy na odwrót??
Bo ja w nagl.h do wzoru nr. 2 dodałem słowo extern.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
int i=1;

to jest definicja z inicjalizacją.

Kopiuj
int i;

to jest definicja bez inicjalizacji.

extern int i; oznacza: gdzieś istnieje zmienna i typu int, ale nie tutaj. jest to tylko informacja dla kompilatora o istnieniu takiej zmiennej.
dlatego potrzeba raz (i tylko raz) podac ją bez extern, by naprawdę ją stworzyć.

extern to skrót od „external”, czyli «zewnętrzny». ma oznaczać, że zmienna jest „gdzieś na zewnątrz”.

liske1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 523
0

Dięki teraz to zrozumiałem ;-)

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

Definicja to deklaracja z inicjalizacją, czyli np. int i = 7. Samo int i; to deklaracja.

Odyn
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 493
0

Tak. Deklaracja zmiennej informuje kompilator, że dana nazwa reprezentuje obiekt określonego typu, definicja zaś określa co pod tym obiektem się kryje, więc np. kompilator może zarezerwować pamięć. Wynika z tego również to, że definicja jest zawsze deklaracją. A inicjalizacja to pierwsze nadanie wartości.

To jest prawidłowe wyjaśnienie tego zagadnienia. Polecam Symfonie C++ Grebosza. Gościu elegancko wyjaśnił wszystko na chłopski rozum bez utrudniania xd

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.