Kompilator nie widzi deklaracji.
Ostatnio zmodyfikowano 2018-08-12 01:24
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2018-08-11 22:44:52 @up: Więc powino być tak:
Main załącza protomc, protomc załącza client, client nie załącza protomc(?, przetworzony/strażnik), protomc załącza lan_worlds, lan_worlds nie załącza protomc(?, przetworzony/strażnik), lan_worlds widzi io_service z client, bo jest już załączone przez protomc.
|
|
jankowalski25 |
» 2018-08-11 22:55:43 client nie załącza protomc(?, przetworzony/strażnik) |
Dokładnie. Wystarczy przejść przez strażnika i plik już nie zostanie dołączony. Faktycznie, pomyliłem się i podałem łańcuch przy załączaniu #include "protomc/lan_worlds.hpp" z jakiegoś pliku *.cpp. Możesz poeksperymentować z opcją -E w GCC i zobaczyć, jak to robi preprocesor. Ogólna zasada jest taka, że wychodzisz zawsze z kompilowanego pliku (czyli zwykle *.cpp) i po kolei robisz kopiuj-wklej przy includach. Jeśli będzie cykl, to preprocesor sobie z tym poradzi, ale inaczej niż tego oczekujesz. Po prostu przy pierwszym odwołaniu do czegoś, co już jest zdefiniowane, całość zostanie ominięta i dostaniesz błąd kompilacji. Dorzucę jeszcze uproszczony przykład: plik_a.hpp#ifndef PLIK_A_HPP #define PLIK_A_HPP
#include "plik_b.hpp"
#endif
plik_b.hpp#ifndef PLIK_B_HPP #define PLIK_B_HPP
#include "plik_a.hpp"
#endif
main.cpp#include "plik_a.hpp"
int main() { } Robimy pierwsze kopiuj-wklej: main.cpp#ifndef PLIK_A_HPP #define PLIK_A_HPP
#include "plik_b.hpp"
#endif
int main() { } Robimy drugie kopiuj-wklej: main.cpp#ifndef PLIK_A_HPP #define PLIK_A_HPP
#ifndef PLIK_B_HPP #define PLIK_B_HPP
#include "plik_a.hpp"
#endif
#endif
int main() { } Teraz już powinno być widać, że linijka dołączająca plik A po raz drugi po prostu się nie wykona, stąd błąd kompilacji. |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2018-08-12 01:24:06 Dziękuję serdecznie wszystkim za udzieloną pomoc, sprawa rozjaśniona. Zamykam temat. :) |
|
1 « 2 » |