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

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

Восстановить пароль Регистрация
 
Unifan
 Аватар для Unifan
0 / 0 / 0
Регистрация: 11.08.2014
Сообщений: 40
22.08.2014, 18:45     Ошибка определения специализации шаблонного класса #1
На этом месте вылазит ошибка: 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++ Инстанцирование шаблонного класса
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
6459 / 3833 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
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
6459 / 3833 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
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
6459 / 3833 / 885
Регистрация: 30.01.2014
Сообщений: 6,629
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     Ошибка определения специализации шаблонного класса
Ответ Создать тему
Опции темы

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