-1

Эй У меня довольно простой вопрос, что некоторые быстрые поисковые запросы Google не могут решить, поэтому я прихожу сюда за помощью.Как написать заголовок функции функции разрешения разрешения для вложенных классов?

У меня возникли проблемы с получением моего задания с земли, потому что я даже не могу написать код скелета!

В принципе у меня есть заголовочный файл следующим образом:

namespace foo{ 
    class A { 
    public: 
     class B { 
      B(); 
      int size(); 
      const int last(); 
     }; 
    }; 
} 

И я хочу знать, как обращаться с этими ребятами за пределами файла в файле реализации.

БОНУС:

namespace foo{ 

    template<typename T> 
    typename 
    class A { 
    public: 
     class B { 
      B(); 
      int size(); 
      const int last(); 
     }; 
    }; 
} 

как эти функции называются?

Есть ли формула, которую я могу отслеживать, когда дело доходит до этого или она более гибкая, различная для ваших нужд?

Спасибо за помощь!

Я использую визуальные студии, если это меняет что-нибудь ...

+1

Я не понимаю ваш вопрос. Это будет просто 'foo :: A :: B :: size()' например. – CoryKramer

+4

Как относятся к «ребятам» в каком контексте? Также см. [Шаблоны должны быть реализованы в файле заголовка] (http: // stackoverflow.com/q/495021/2069064) – Barry

+0

являются константой любого другого, когда дело касается шаблонов? –

ответ

4

Дано:

namespace foo{ 
    class A { 
    public: 
     class B { 
      B(); 
      int size(); 
      const int last(); 
     }; 
    }; 
} 

полное имя для определения функции размера или последнего будет:

int foo::A::B::size() {...} 
const int foo::A::B::last() {...} 

Дано:

namespace foo{ 

    template<typename T> 
    typename 
    class A { 
    public: 
     class B { 
      B(); 
      B & operator ++(); 
      int size(); 
      const int last(); 

      template< typename I, typename R> 
      R getsomethingfrom(const I &); 
     }; 
    }; 
} 

Определения функций будет:

template <typename T> int foo::A<T>::B::size() { ... } 
template <typename T> const int foo::A<T>::B::last() { ... } 

Для них получение указателя на функцию-член будет:

auto p = &foo::A<T>::B::size; 

определение конструктора будет:

template<typename T> foo::A<T>::B::B() {} 

Изготовление одна из этих вещей:

foo::A<T>::B nb{}; // note, with nb() it complains 

Определение функции оператор возвращает ссылку на B, в шаблоне, сложно:

template<typename T>   // standard opening template.... 
typename foo::A<T>::B &  // the return type...needs a typename 
foo::A<T>::B::operator++()  // the function declaration of operation ++ 
{ ... return *this; }  // must return *this or equivalent B& 

В случае вам интересно, если шаблон функция находится внутри B, как и getsomethingfrom, тогда определение функции:

template< typename T>      // class template 
template< typename I, typename R>   // function template 
R foo::A<T>::B::getsomethingfrom(const I &) // returns an R, takes I 
{ R r{}; return r } 
+0

спасибо, что это то, что я ищу, у меня есть случай, когда у меня есть что-то вроде 'B & operator ++();' в заголовке, и я пытаюсь реализовать его как 'typename B & A :: B :: operator ++()', но я получаю сообщение об ошибке, которое не распознает определение, знаете ли вы, в чем проблема? –

+0

Извините, не было .... проверьте ответ в 5, отредактируйте, чтобы включить его – JVene

0

Чтобы использовать класс в вашей реализации (.cpp) файл, который вы идете любит, что:

namespace foo{ 
    A::B::B(){ 
     // this is your inner class's constructor implementation 
    } 

    int A::B::size(){ 
     // implementation for you size() 
     int res = last(); // access the method last() of the same object 
     return res; 
    } 

    const int A::B::last(){ 
     // implementation of last() 
     return 42; 
    } 

} 

void main(){ 
    foo::A a; // construct an object of A 
    // can't do anything useful as the methods of A::B are all private 
} 
+0

Вы правы. Stupid copy-paste, забыл это сделать :) – YePhIcK

 Смежные вопросы

  • Нет связанных вопросов^_^