Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Romires008
Сообщений: n/a
#1

Определение функции за пределами шаблона класса - C++

13.01.2013, 17:15. Просмотров 589. Ответов 3
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template< typename TData >
class Owner
{
public:
  class Holder
  {
  public:
    TData i;
  };
  Holder foo(TData x);
};
 
template<typename TData> Owner<TData>::Holder Owner<TData>::foo(TData x)
{
  Holder tmp;
  tmp.i = x*x;
  return tmp;
}
C++
1
2
3
4
5
1>d:\inteniumtest\task3\task3\task3\task3.cpp(19) : warning C4346: 'Owner<TData>::Holder' : dependent name is not a type
1>        prefix with 'typename' to indicate a type
1>d:\inteniumtest\task3\task3\task3\task3.cpp(19) : error C2143: syntax error : missing ';' before 'Owner<TData>::foo'
1>d:\inteniumtest\task3\task3\task3\task3.cpp(19) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>d:\inteniumtest\task3\task3\task3\task3.cpp(19) : fatal error C1903: unable to recover from previous error(s); stopping compilation
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2013, 17:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определение функции за пределами шаблона класса (C++):

Определение метода-шаблона за пределами шаблона класса - C++
День добрый! Разбираюсь в шаблонах, решил копнуть поглубже. Вот пример: template &lt;typename T1&gt; class K // шаблон класса { public:...

Определение чистой виртуальной функции класса-шаблона - C++
Есть класс Comparable&lt;T&gt;: template&lt;typename T&gt; class Comparable : virtual public Object { public: virtual int compareTo(const T...

Можно ли разбивать определение шаблона класса на несколько файлов? - C++
Можно ли написать в хедере определение класса с прототипами методов, а реализацию методов в отдельном файле?

Stack. определение шаблона функции testStack. (хочу разобраться в коде) - C++
Вот эта программа. Хочу разобраться в коде. #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;Stack&gt; using namespace std; ...

Как сделать шаблон функции другом шаблона класса? - C++
С обычной функцией понятно: template&lt;class T&gt; class A { friend void f(); } А вот если функция f шаблонная, то указать ее...

Создание шаблона bool-функции, принимающей в качестве параметра экземпляр класса - C++
Добрый день. Никак не получается осилить) Суть: есть классы, у которых есть поле str - массив символов. Хочу сделать...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
13.01.2013, 17:43 #2
у меня все работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 #include <iostream>
 using namespace std;
 
    template< typename TData >
    class Owner
    {
    public:
      class Holder
      {
      public:
        TData i;
      };
      Holder foo(TData x);
    };
 
    template<typename TData> Owner<TData>::Holder Owner<TData>::foo(TData x)
    {
      Holder tmp;
      tmp.i = x*x;
      return tmp;
    }
 
 int main()
 {
  Owner<int> ow;
  cout << ow.foo(2).i<<endl;
  system("pause");
 }
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
13.01.2013, 17:46 #3
вот результат
Миниатюры
Определение функции за пределами шаблона класса  
Croessmah
Модератор
Эксперт CЭксперт С++
13134 / 7397 / 828
Регистрация: 27.09.2012
Сообщений: 18,227
Записей в блоге: 3
Завершенные тесты: 1
13.01.2013, 17:55 #4
Как вариант:
C++
1
2
3
4
5
6
7
    template<typename TData> 
     typename Owner<TData>::Holder Owner<TData>::foo(TData x)
    {
      Holder tmp;
      tmp.i = x*x;
      return tmp;
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.01.2013, 17:55
Привет! Вот еще темы с ответами:

объявление и определение функции класса - C++
почему не компилируется #include &lt;iostream&gt; int main(){ class A { public: A(); // объявление конструктора

Явное создание экземпляра класса и явная специализация шаблона класса - C++
Всем добрый день! Не могу разобраться - эти две технологии дают один и тот же результат? В каких случаях применять одно и другое?...

Расширение области видимости класса, за пределами цикла - C++
Здравствуйте, такой вопрос.... В общем пишу игру и а любая игра предполагает обновление экрана в цикле, дак вот.. Допустим я хочу создать...

Зачем объявляют методы для класса за его пределами? - C++
Имеется пример: #include&lt;iostream.h &gt; class Example{ public: int num; //Функция для установки значения void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.01.2013, 17:55
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru