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

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

Войти
Регистрация
Восстановить пароль
 
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
#1

Ошибка определения специализации шаблонного класса - C++

22.08.2014, 18:45. Просмотров 230. Ответов 5
Метки нет (Все метки)

На этом месте вылазит ошибка: Error 1 error C3413: 'MyClass<int>' : invalid explicit instantiation
C++ (Qt)
1
template class MyClass<int>
C++ (Qt)
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
#include <iostream>
using namespace std;
 
template <class T> class MyClass {
    T x;
public:
    MyClass(T a) {
        cout << "Внутри конструктора родового класса\n";
        x = a;
    }
 
    T getx() { return x; }
};
 
// Явная специализация для int
template class MyClass<int> {
    int x;
public:
    MyClass(int a) {
        cout << "Внутри специализации MyClass<int>\n";
        x = a * a;
    }
 
    int getx() { return x; }
};
ЧаВо делать?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2014, 18:45     Ошибка определения специализации шаблонного класса
Посмотрите здесь:

C++ Проблема наследования от шаблонного класса.
C++ Обявление шаблонного класса
Перегрузка << , >> для шаблонного класса C++
C++ Функция-член шаблонного класса
C++ Создание Шаблонного класса
C++ Инстанцирование шаблонного класса
C++ Ошибка при специализации шаблона
Итератор внутри шаблонного класса C++
Ошибка при создании шаблонного класса C++
C++ Специализации шаблонов класса
Реализация шаблонного класса C++
Специализация шаблонного класса C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
22.08.2014, 18:47     Ошибка определения специализации шаблонного класса #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Unifan Посмотреть сообщение
На этом месте вылазит ошибка: Error 1 error C3413: 'MyClass<int>' : invalid explicit instantiation
C++
1
template <> class MyClass<int>
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
22.08.2014, 18:49  [ТС]     Ошибка определения специализации шаблонного класса #3
Между тем, если template убрать все начинает компилироваться. НО!!!!!!!!!!! Должно работать так, как заявлено у меня. Как минимум потому, что Шилдт это компилирует, или стандарты С++ подверглись модификациям?
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
22.08.2014, 18:50     Ошибка определения специализации шаблонного класса #4
Цитата Сообщение от Unifan Посмотреть сообщение
Как минимум потому, что Шилдт это компилирует
Если в книжке без <>, то там просто опечатка.
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
22.08.2014, 18:52  [ТС]     Ошибка определения специализации шаблонного класса #5
DrOffset, то есть вы хотите сказать, что специализация шаблонной функции при ее объявлении должна объявляться примерно также? Ибо в книжке опечатка 4 раза получается. ( с учетом отдельно взятых предложений )
DrOffset
6817 / 4028 / 924
Регистрация: 30.01.2014
Сообщений: 6,847
22.08.2014, 19:05     Ошибка определения специализации шаблонного класса #6
Цитата Сообщение от Unifan Посмотреть сообщение
то есть вы хотите сказать, что специализация шаблонной функции при ее объявлении должна объявляться примерно также? Ибо в книжке опечатка 2 раза получается.
Книжка Шилдта знаменита своими неточностями.
Вот примеры.
C++
1
2
3
4
5
6
7
8
template <typename T>
class A {}; // основной шаблон
 
template <>
class A<int> {}; //полная специализация
 
template <typename B>
class A< std::vector<B> > {}; //частичная специализация
Добавлено через 5 минут
Цитата Сообщение от Unifan Посмотреть сообщение
специализация шаблонной функции
Для функции разрешена только полная специализация.
Вообще да, также.
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename T>
void foo();
 
template <>
void foo<int>(); // специализация
 
template <typename T>
void foo(T a);
 
template <>
void foo(int a); // специализация
Yandex
Объявления
22.08.2014, 19:05     Ошибка определения специализации шаблонного класса
Ответ Создать тему
Опции темы

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