ďťż

Ładny brzuch

Witam wszystkich.

Od niedawna zainteresowałem sie językiem c++ jestem mało doświadczony więc prosze o pomoc. Mianowicie problem pojawia sie gdy chce zrobic programik składający się z kilku plików źródłowych oto one :

plik0.cpp

#include <iostream.h> #include "naglowek.h" int liczba1 = 1; int liczba2 = 2; int liczba3 = 3; int main () {    cout<<"Jestem w pliku 0, funkacja main ()\n";      pierwsza ();        cout<< "\n\tJestem spowrotem  pliku 0 w funkcji 1";     }

plik1.cpp
#include <iostream.h> #include "naglowek.h" int liczba2 = 2; void pierwsza () {     cout<<"\nJestem w pliku 1 w funkcji pierwsza\n";     cout <<"Liczba 1 wynosi : "<<liczba1;     cout <<"\nLiczba 2 wynosi : "<<liczba2<<endl;         trzecia (); } /******************************************************/     void druga () {     cout<<"\nJestem w pliku 1 w funkcji drugiej\n";     cout <<"Liczba 1 wynosi : "<<liczba1;     cout <<"\nLiczba 2 wynosi : "<<liczba2;     cout <<"\nLiczba 3 wytnosi : "<<liczba3 <<endl;     czwarta(); }

plik2.cpp
#include <iostream.h> #include "naglowek.h" int liczba3 = 3; void trzecia () {     cout <<"Jestem w pliku2 w funkcji 3\n";     cout <<"Liczba 1 wynosi : "<<liczba1;     cout <<"\nLiczba 2 wynosi : "<<liczba2;     cout <<"\nLiczba 3 wytnosi : "<<liczba3<<endl;     druga();     } /**************************************************/ void czwarta () {     cout <<"Jestem w pliku2 w funkcji 4\n";     cout <<"Liczba 1 wynosi : "<<liczba1;     cout <<"\nLiczba 2 wynosi : "<<liczba2;     cout <<"\nLiczba 3 wytnosi : "<<liczba3 <<endl;   }

naglowek.hpp
extern int liczba1; extern int liczba2; extern int liczba3; void pierwsza (); void druga (); void trzecia (); void czwarta ();

Problem pojawia się gdy próbuje skompilowac plik0.cpp, wyświetla mi sie błąd :
[Linker error] undefined reference to 'pierwsza ()'

Uzywam kompilatora Dev C++.

PS: Na przykładzie przepisanym "żywcem" z ksiązki jest identycznie.



Moze sie myle (a raczej napewno ,znajac zycie :P ) ale nie powinienes przypadkiem umiescic w naglowek.hpp linjki w ktorej zapisane gdzie ma szukac funkcji 'pierwsza' , 'druga' itd. Kompilator to nie jasnowidz ;)

Bez bicia sie przyznam, ze przelecialem kod pobieznie :P

Ale tak sie zapytam, jak ty to kompilujesz ????
Jako projekt, czy po prostu otworzyles kilka plikow i je sobie kompilujesz ??

Cóż masz racje nie zrobilem projektu. Ale po zrobieniu projektu i probie kompilacji rowinez cos sie miesza <_< zobaczcie:

LINK

P.S: No nie śmiejcie sie ze mnie to moj pierwszy program ktory sklada sie z kilku oddzielnych plikow.



Po pierwsze to zapamietaj, ze wszystkie b;edy sa opisane !!!!!!!!!!
Ty sie koncentrujesz na tym,ze nie znana jest funkcja pierwsza, a dwie linijki wyzej pisze, ze nie mozna odnalezsc pliku naglowek.h :excl:

I nic w tym dziwnego ze nie mozna, poniewaz ten plik nazywa sie naglowek.hpp.

Trzeba czytac, co do ciebie pisze kompilator :P Ja wiem, ze Dev, nie ma najlepszego wyjscia bledow, ale coz zrobic, zawsze mozna uzywac srodowiska cyg-win(goraco polecam) i tam bedzie wszystko czytelniejsze :D

Zawsze czytaj bledy od poczatku, i w takiej samej kolejnosci je poprawiaj

Masz racje; mój błąd. Zrobilem jak mowiles i dalej mam z tym dziadostwem problem, kompilacja szła dobrze tylko pod koniec cos sie zjepsuło, tym razem wkleje log kompilacji.


Kompilator: Default compiler
Building Makefile: "E:\Projekt\Makefile.win"
Wykonywanie  make...
make.exe -f "E:\Projekt\Makefile.win" all
g++.exe -D__DEBUG__ plik0.o plik1.o plik2.o  -o "Projekt1.exe" -L"e:/Dev-Cpp/lib"  -g3

plik1.o(.data+0x0): In function `ZSt17__verify_groupingPKcjRKSs':
e:/Dev-Cpp/include/c++/3.4.2/bits/locale_facets.tcc:2493: multiple definition of `liczba2'
plik0.o(.data+0x4):e:/Dev-Cpp/include/c++/3.4.2/bits/locale_facets.tcc:2493: first defined here
plik2.o(.data+0x0): In function `ZSt17__verify_groupingPKcjRKSs':
e:/Dev-Cpp/include/c++/3.4.2/bits/locale_facets.tcc:2493: multiple definition of `liczba3'
plik0.o(.data+0x8):e:/Dev-Cpp/include/c++/3.4.2/bits/locale_facets.tcc:2494: first defined here
collect2: ld returned 1 exit status

make.exe: *** [Projekt1.exe] Error 1

Wykonanie zakończone


jak cos do dodam jeszcze screna

Z tego co przeczytałem to widze, że kompilator zgłasza bład wielokrotnej definicji "liczba2" i "liczba3". Skoro w pliku nagłówkowym zdefiniowałeś je jako extern, to wystarczy je zdefiniować tylko w jednym pliku, a ty je definiujesz najpierw w plik0.cpp, co powinno wystarczyć, a w plik1.cpp i plik2.cpp juz ich nie definiuj.

plik0.cpp
int liczba1 = 1; int liczba2 = 1; int liczba3 = 1;

plik1.cppliczba2 = 2;
plik2.cppliczba3 = 3;
Użytkownik Luzik edytował ten post 31 sierpień 2005, 07:58
Jest Wam wdzięczny kolejny młody (przyszły) programista C++, wreszcie przebrnąłem przez ten skromny ale zamotany projekt.

Dzięki za pomoc, sorki za moją nieuwage ale cały czas się ucze wiec takie zachowania z mojej strony nie powinny Was dziwić.

Jeszcze raz dzieki za pomoc.
uzdrawiam Andrzej.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •