Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> непонятка с дружественными классами 
V
    Опции темы
boostcoder
Дата 8.2.2011, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



всем привет.
такой код:
Код

template<typename>
struct type1;

namespace impl {

struct type2 {

   template<typename>
   friend struct type1;

   template<typename T>
   type1<T> get() { return type1<T>(this); }

private:
   void method() {} // 2. <<<<<<<<<<<<<<<<<<<<<
};

} // namespace impl

template<typename>
struct type1 {
   type1(impl::type2* t2)
      :t2(t2)
   {}

   void method() {
      t2->method(); // 1. <<<<<<<<<<<<<<<<<<
   }

private:
   impl::type2* t2;
};

int main() {
   impl::type2 t2;
   type1<int> t1 = t2.get<int>();
   t1.method();
}


http://liveworkspace.org/code/28ac9f0119d1...ccd77f0234ebbb7

если type2 вынести из пространства имен impl, то проблемы нет.
подскажите где затык?

спасибо.

PM WWW   Вверх
OlegSK
Дата 8.2.2011, 02:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.7.2010

Репутация: нет
Всего: нет



В VS2010 программа компилится без проблем.
PM MAIL   Вверх
azesmcar
Дата 8.2.2011, 06:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 81
Всего: 211



boostcoder, 
Цитата

Every name first declared in a namespace is a member of that namespace. If a friend declaration in a non-local class first declares a class or function the friend class or function is a member of the innermost enclosing namespace. The name of the friend is not found by simple name lookup until a matching declaration is provided in that namespace scope (either before or after the class declaration granting friendship). If a friend function is called, its name may be found by the name lookup that considers functions from namespaces and classes associated with the types of the function arguments (3.4.2). When looking for a prior declaration of a class or a function declared as a friend, and when the name of the friend class or function is neither a qualified name nor a template-id, scopes outside the innermost enclosing namespace scope are not considered. .

т.е.
Код

template<typename> friend struct type1;

это объявление другом структуры impl::type1
надо вот так

Код

template<typename> friend struct ::type1;


Цитата(OlegSK @  8.2.2011,  02:36 Найти цитируемый пост)
В VS2010 программа компилится без проблем. 

это совершенно ничего не значит.
PM   Вверх
boostcoder
Дата 8.2.2011, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 49
Всего: 110



azesmcar, помогло.
спасибо smile 

PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2193 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.