Kompilator nie widzi deklaracji.
Ostatnio zmodyfikowano 2018-08-12 01:24
Rashmistrz Temat założony przez niniejszego użytkownika |
Kompilator nie widzi deklaracji. » 2018-08-11 21:42:21 protomc.hpp#ifndef PROTOMC_HPP #define PROTOMC_HPP
#include <asio.hpp> #include "protomc/client.hpp" #include "protomc/lan_worlds.hpp"
#endif
client.hpp#ifndef PROTOMC_CLIENT_HPP #define PROTOMC_CLIENT_HPP
#include "../protomc.hpp"
namespace protomc { class client { public: static asio::io_service io_service; }; }
#endif
client.cpp#include "client.hpp"
namespace protomc { asio::io_service client::io_service; } lan_worlds.hpp#ifndef PROTOMC_LAN_WORLDS_HPP #define PROTOMC_LAN_WORLDS_HPP
#include <regex> #include <string> #include <iostream> #include "../protomc.hpp"
namespace protomc { class lan_world { }; class lan_worlds { public: lan_worlds() : socket_( client::io_service ) { } }; }
#endif
] build In file included from protomc/../protomc.hpp:6, from protomc/client.hpp:4, from protomc/client.cpp:1: protomc/../protomc/lan_worlds.hpp: In constructor 'protomc::lan_worlds::lan_worlds()': protomc/../protomc/lan_worlds.hpp:45:24: error: 'client' has not been declared : socket_( client::io_service) ^~~~~~ Build failed.
]_ Dlaczego dla kompilatora jest to problemem? Powinienem móc się odwołać do client::io_service, dlaczego klasa client nie jest dostępna z tego miejsca w programie? |
|
DejaVu |
» 2018-08-11 21:46:29 |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2018-08-11 21:48:35 cykliczne odwołania w headerach |
Mógłbym prosić o podjaśnienie? Intuicja sugeruje mi, że wszystko jest w porządku, więc nie za bardzo widzę problemu. :C EDIT: Dziękuję. Przejrzę link. :) |
|
DejaVu |
» 2018-08-11 21:49:12 Zobacz link doklejony do poprzedniej wiadomości. Tam jest wyjaśnione (w miarę). |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2018-08-11 22:20:13 -main załącza protomc -protomc załącza client i lan_worlds, zaś -client i lan_worlds załączają protomc
Wszystkie są chronione guardsami, więc nie powinien powstać cykl. :/
Po prostu chcę mieć dostęp do wszystkich plików nagłówkowych z jednego pliku nagłówkowego i kożystać z niego w całym projekcie. :F
|
|
DejaVu |
» 2018-08-11 22:21:23 protomc.hpp -> client.hpp client.hpp -> protomc.hpp
jest cykl. |
|
Rashmistrz Temat założony przez niniejszego użytkownika |
» 2018-08-11 22:34:54 Nie rozumiem rzeczy problemu, kompilator powinien na to pozwolić.
Dziękuję za rady. Pozbyłem się cykli, tak żeby graf załączeń wyglądał jak drzewo.
Może uda mi się ustalić jakąś wspólną "gałąź", którą będę mógł załączać wewnątrz projektu.
:)
|
|
jankowalski25 |
» 2018-08-11 22:35:16 Wszystkie są chronione guardsami, więc nie powinien powstać cykl. :/ |
Nie, to tak nie działa. Preprocesor robi tutaj niewiele więcej niż zwykłe kopiuj-wklej. lan_worlds.hpp #include "../protomc.hpp"
|
protomc.hpp #include "protomc/client.hpp"
|
client.hpp#include "../protomc.hpp" |
Ta linijka nie robi nic. Plik był już przetwarzany, linijka #define PROTOMC_HPP została wykonana. Preprocesor nie rozwiązuje w cudowny sposób zależności, jedynie wkleja zawartość jednego pliku do innego. |
|
« 1 » 2 |