problem z przejsciem na visual C++ 2010

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?

0

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

0

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

0

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

0

deklaracja to np.:

int i=1; 

definicja to np.:

int i; 

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

0
int i=1;

to jest definicja z inicjalizacją.

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”.

0

Dięki teraz to zrozumiałem ;-)

0

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

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1