Konieczność użycia globalnego namespace'u

0

Cześć,

mam taki problem.
Mam bibliotekę o nazwie Link, która ma swój namespace i w niej są klasy. Powiedzmy, że jest tam klasa:

namespace Link
{
class Remote
{ /* ... */ };
}

Dalej, dodaję tę klasę do innej biblioteki/binarki wykonywalnej poprzez target_link_libraries w CMake'u i mam tam taką implementację:

namespace Link
{
class Remote;
}

namespace ConnectorNs
{
class Connector
{
public:
    Connector(std::unique_ptr<Link::Remote> link,
              std::unique_ptr<ExampleNs1::ClassA> objA,
              std::unique_ptr<ExampleNs2::ClassB> objB)
    {}
};
}

Powyższa implementacja daje błąd:

'Remote' is not a member of 'ConnectorNs::Link'

To się dzieje tylko w przypadku Link::Remote. Pozostałe ExampleNs1, ExampleNs2 są ok.

Czy coś tutaj robię źle?
Oczywiście rozwiązaniem jest dodanie globalnego namespace'u do przestrzeni nazw Link, jak poniżej:
Connector(std::unique_ptr<::Link::Remote> link,

Tak jak wspomniałem, rozwiązałem ten problem w powyższy sposób, ale wydaje mi się, że odniesienie do globalnej przestrzeni nazw nie powinno być konieczne.

Dzięki z góry!

0

Wywal te 4 wiersze.

4

Niezbyt mogę zreprodukować problem. U mnie zdaje się działać wersja bez ::. Dasz minimalny reprodukowalny przykład? Nie używałem również cmake, więc może coś się wkradło przez to, ale wydaje mi się, że nie powinno to mieć znaczenia.

0

@tańcząca żyrafa: tak z ciekawości jaki to kompilator i system ?
cmake to raczej nie ma związku z problemem, zapachnij prosty przykład z 5 plikami

0

SOA#1:
https://godbolt.org/z/q9974eeac https://godbolt.org/z/5bMvbWq4j

Podaj Minimalny Kompletny Reprodukowalny Przykład

2

Dobra doznałem objawienia i odgadnąłem brakującą informację: https://godbolt.org/z/fjovK3dhM
Problemem jest to, że masz namespace o nazwie: ::ConnectorNs::Link!
Więc kompilator był w stanie dopasować namespace-a innego niż oczekiwałeś(aś), w którym nie ma klasy Remote.

1 użytkowników online, w tym zalogowanych: 0, gości: 1