UFO Napisano Grudzień 15, 2019 Autor Zgłoś Udostępnij Napisano Grudzień 15, 2019 Może spotkał się ktoś już z tym błędem i wie co on oznacza? :( . O ile dobrze rozumiem to oznacza 'wielokrotne definicje ...', ale każda z wymienionych nazw zmiennych lub funkcji znajduje się w osobnych plikach nagłówkowych a w każdym pliku umieciłem linijki: #ifndef MojaNazwa #define MojaNazwa zawartość pliku #endif ale nic to nie pomogło . I już nie wiem czy to ja coś źle robię czy to edytor się rypnął. Mój log: Compiler: Default compiler Building Makefile: "F:\PłytaNr.6\KodyZrodlowe\My\RAD\Makefile.win" Executing make... make.exe -f "F:\PłytaNr.6\KodyZrodlowe\My\RAD\Makefile.win" all g++.exe main.o CodeEditor.o ToolBar.o StatusBar.o LeftPanel.o MainMenu.o RAD_private.res -o "RAD.exe" -L"C:/Dev-Cpp/lib" -mwindows C:/Dev-Cpp/lib/libcomctl32.a CodeEditor.o(.bss+0x0):CodeEditor.cpp: multiple definition of `CodeEditor_Handle' main.o(.bss+0xd0):main.cpp: first defined here CodeEditor.o(.bss+0x4):CodeEditor.cpp: multiple definition of `CodeEditor_Tab' main.o(.bss+0xd4):main.cpp: first defined here CodeEditor.o(.bss+0x20):CodeEditor.cpp: multiple definition of `CodeEditor_ClientRect' main.o(.bss+0xf0):main.cpp: first defined here ToolBar.o(.bss+0x0):ToolBar.cpp: multiple definition of `ToolBar_Handle' main.o(.bss+0x74):main.cpp: first defined here ToolBar.o(.bss+0x4):ToolBar.cpp: multiple definition of `ToolBar_ImageList' main.o(.bss+0x78):main.cpp: first defined here ToolBar.o(.bss+0x20):ToolBar.cpp: multiple definition of `ToolBar_Buttons' main.o(.bss+0x80):main.cpp: first defined here StatusBar.o(.bss+0x0):StatusBar.cpp: multiple definition of `StatusBar_Handle' main.o(.bss+0x70):main.cpp: first defined here LeftPanel.o(.bss+0x0):LeftPanel.cpp: multiple definition of `LeftPanel_Handle' main.o(.bss+0x4c):main.cpp: first defined here LeftPanel.o(.bss+0x4):LeftPanel.cpp: multiple definition of `LeftPanel_TreeView1' main.o(.bss+0x50):main.cpp: first defined here LeftPanel.o(.bss+0x8):LeftPanel.cpp: multiple definition of `LeftPanel_Tab' main.o(.bss+0x54):main.cpp: first defined here MainMenu.o(.bss+0x0):MainMenu.cpp: multiple definition of `MainMenu_Handle' main.o(.bss+0x0):main.cpp: first defined here MainMenu.o(.bss+0x4c):MainMenu.cpp: multiple definition of `CodeEditor_Handle' main.o(.bss+0xd0):main.cpp: first defined here MainMenu.o(.bss+0x50):MainMenu.cpp: multiple definition of `CodeEditor_Tab' main.o(.bss+0xd4):main.cpp: first defined here MainMenu.o(.bss+0x6c):MainMenu.cpp: multiple definition of `CodeEditor_ClientRect' main.o(.bss+0xf0):main.cpp: first defined here MainMenu.o(.bss+0x7c):MainMenu.cpp: multiple definition of `StatusBar_Handle' main.o(.bss+0x70):main.cpp: first defined here collect2: ld returned 1 exit status make.exe: *** [RAD.exe] Error 1 Execution terminated Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Cipher Napisano Grudzień 18, 2019 Zgłoś Udostępnij Napisano Grudzień 18, 2019 Z DevCpp nie kożystam jednak wydaje mi się że problem polega na tym iż w pliku nagłówkowyn masz umieszczone deklaracje zmiennych oraz definicje ciał funkcji. Gdy później dany plik nagłówkowy dołączasz w kilku innych plikach projektu to następuje zjawisko podwujnej definicji. Zasada jest prosta: NIE WOLNO definiować ciał funkcji w plikach nagłówkowych. NIE WOLNO umieszczać deklaracji zmiennych w plikach nagłówkowych. I nic tu nie pomogą dyrektywy #ifndef i #define. Podobny temat dotyczący jednak visual C++ był już niedawno na tym forum o tu https://www.winapi.org/forum/viewtopic.php?t=725 Jeżeli będziesz miał jeszcze jakieś pytania to wal śmiało. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
UFO Napisano Grudzień 18, 2019 Autor Zgłoś Udostępnij Napisano Grudzień 18, 2019 :D no tak... moja wina zadeklarowałem w każdym pliku nagłówkowym po jednej zmiennej. Nikt wcześniej mi nie powiedział że nie wolno tego robić, myślałem że jeżeli mogę zadeklarować zmienną w deklaracji klasy to mogę też zadeklarować zmienną globalną . Szkoda że zdążyłem już wszystko przepisać na Delphi, ale przynajmiej nie ma tam takich ograniczeń. ps: pytań będzie jeszcze bardzo dużo, ale już nie w tym temacie :D . Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Cipher Napisano Grudzień 25, 2019 Zgłoś Udostępnij Napisano Grudzień 25, 2019 Na Delphi się nie znam więc wierze na słowo. Jeżeli chodzi o C++ to zawsze możesz skorzystać ze słowa kluczowego extern które poinformuje kompilator o istnieniu zmiennej zadeklarowanej w innym pliku. Przykład: //Plik zmienna.h. #ifndef ZMIENNA_H #define ZMIENNA_H extern int zmienna; #endif //Plik zmienna.cpp #include "zmienna.h" int zmienna=5; //Plik main.cpp #include <iostream> #include "zmienna.h" using namespace std; int main() { cout<<zmienna<<endl; system("pause"); return 0; } Myśle że nie ma co wyjaśniać, wszystko powinno być jasne. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.