Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kompilator nie widzi deklaracji.

Ostatnio zmodyfikowano 2018-08-12 01:24
Autor Wiadomość
Rashmistrz
Temat założony przez niniejszego użytkownika
Kompilator nie widzi deklaracji.
» 2018-08-11 21:42:21

protomc.hpp

C/C++
#ifndef PROTOMC_HPP
#define PROTOMC_HPP

#include <asio.hpp>
#include "protomc/client.hpp"
#include "protomc/lan_worlds.hpp"

#endif // PROTOMC_HPP

client.hpp

C/C++
#ifndef PROTOMC_CLIENT_HPP
#define PROTOMC_CLIENT_HPP

#include "../protomc.hpp"

namespace protomc
{
    class client
    {
    public:
        static asio::io_service io_service;
    };
}

#endif // PROTOMC_CLIENT_HPP

client.cpp

C/C++
#include "client.hpp"

namespace protomc
{
    asio::io_service client::io_service;
}

lan_worlds.hpp

C/C++
#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 // PROTOMC_LAN_WORLDS_HPP

] 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?
P-172068
DejaVu
» 2018-08-11 21:46:29
Nie działa bo masz cykliczne odwołania w headerach (czyli źle zaprojektowany kod).

http://cpp0x.pl/forum/temat/​?id=8302
P-172069
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. :)
P-172070
DejaVu
» 2018-08-11 21:49:12
Zobacz link doklejony do poprzedniej wiadomości. Tam jest wyjaśnione (w miarę).
P-172071
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
P-172073
DejaVu
» 2018-08-11 22:21:23
protomc.hpp -> client.hpp
client.hpp -> protomc.hpp

jest cykl.
P-172074
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.

:)

P-172075
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

C/C++
//...
#include "../protomc.hpp"

protomc.hpp

C/C++
//...
#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.
P-172076
« 1 » 2
  Strona 1 z 2 Następna strona