Я изо всех сил пытаюсь сделать свой класс другом шаблона в его родительском пространстве имен. Может кто-нибудь объяснить, что я делаю неправильно:
Вот мои попытки и их ошибки с MSVC8 (Visual Studio 2005):
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class x;
...
};
}
}}
ошибка C2888: a::b::x: символ не может быть определен в пространстве имен c
namespace a {
namespace b {
template<typename T>
class x;
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
ошибка C2888: a::b::x: символ не может быть определен в пространстве имен c
namespace a {
namespace b {
namespace c {
class y
{
template<typename T>
friend class ::a::b::x;
...
};
}
}}
ошибка C2039: x : не является членом a::b
Я не могу просто включить заголовочный файл, содержащий class x, поскольку он зависит от class y, что приводит к циклическому включению.
clang 3.1,g++ 4.6.2иVS 2008. Можете ли вы попробовать скомпилировать тестовую программу, которую @SethCarnegie опубликовал в своей ссылке с MS VS 2005? Похоже на ошибку в компиляторе... - person dirkgently   schedule 22.05.2012error C2888: 'a::b::x' : symbol cannot be defined within namespace 'c'не идеал. Это даже не сработает, если я полностью определюclass x, а не просто объявлю его. - person thehouse   schedule 22.05.2012template<typename> class x, я взломал его, подружившись с каждым отдельно (см. мой ответ). - person thehouse   schedule 22.05.2012