Форум программистов, компьютерный форум, киберфорум
Наши страницы

Ошибка с шаблонами - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Dsd-master 1.7 для декодирования d-star http://www.cyberforum.ru/cpp/thread1639265.html
здравствуйте уважаемые форумчане, мне нужна помощь в запуске программы через bash в cygwin в windows но данная программа на данный момент хранится в не скомпилированном варианте. Кто то давно его...
C++ Исправить код базы данных Помогите решить задачу Особенности - условие задачи является внедрение трех функций - insert - вставить новую строку (запись) в системе со всей информацией, -find - указано количество столбцов, по... http://www.cyberforum.ru/cpp/thread1637924.html
[дизайн и эволюция] провалы в variadic конструкторы C++
всем привет. уже несколько человек обращались ко мне по почте, с просьбой помочь разобраться с variadic конструкторами. я закобался отвечать каждому персонально, и решил создать эту тему....
C++ MPI задача коммивояжера методом ветвей и границ
помогите реализацией задача коммивояжера методом ветвей и границ на вычислительном кластере. может у кого то готовая программа есть или пример
C++ Нужна программа Логическая игра "Маджонг" может кто делал http://www.cyberforum.ru/cpp/thread1637074.html
Игра Маджонг, В ходе игры необходимо очистить игровое поле, убирая одинаковые фишки. удаляться они могут только в том случае, если у фишки открыта хотя бы одна сторона. Сложность игры зависит от...
C++ Скомпилировать OpenPegasus под Win32. C/C++ Помогите скомпилировать OpenPegasus под Win32. C/C++ Есть проект OpenPegasus под Unix. Нужно его скомпилировать под Windows. Цель - поднять WMI/Wbem service provider на Win32. Исходники... подробнее

Показать сообщение отдельно
NikBond
2 / 2 / 2
Регистрация: 21.07.2015
Сообщений: 36

Ошибка с шаблонами - C++

16.01.2016, 03:32. Просмотров 164. Ответов 1
Метки (Все метки)

Возникла проблема. Пример: Создал шаблонный класс с двумя параметрами, один из которых задан по умолчанию. С одной стороны, все работает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
template <class A, class B = A>
class MyClass{
    A a;
    B b;
    public:
        void foo(){
            cout << "Hello";
        };
};
 
int main(){
    MyClass <int> test;
    test.foo();
    return 0;
}

Но если сделать все порядочно и вынести реализация методов за их объявление:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
using namespace std;
 
template <class A, class B = A>
class MyClass{
    A a;
    B b;
    public:
    void foo();
};
 
template <class A, class B = A>
void MyClass <A>:: foo(){
    cout << "Hello";
}
 
int main(){
    MyClass <int> test;
    test.foo();
    return 0;
}
Выдает ошибку компиляции
Сообщение об ошибке:
Код
||=== Build: Debug in template test (compiler: GNU GCC Compiler) ===|
D:\Programming\C++\Projects\template test\main.cpp|14|error: invalid use of incomplete type 'class MyClass<A>'|
D:\Programming\C++\Projects\template test\main.cpp|6|error: declaration of 'class MyClass<A>'|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Что я делаю не так? Как правильно?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.