problem z przejsciem na visual C++ 2010

problem z przejsciem na visual C++ 2010
liske1
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 dni
  • Postów:522
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:ponad 21 lat
  • Ostatnio:około 4 godziny
0

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

liske1
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 dni
  • Postów:522
0

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


hauleth
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:10 dni
0

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


liske1
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 dni
  • Postów:522
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:ponad 21 lat
  • Ostatnio:około 4 godziny
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”.

edytowany 1x, ostatnio: Azarien
liske1
  • Rejestracja:ponad 13 lat
  • Ostatnio:5 dni
  • Postów:522
0

Dięki teraz to zrozumiałem ;-)


somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:6 dni
  • Lokalizacja:Wrocław
0

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

somekind
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.
Odyn
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 5 lat
  • 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.