2013-05-03 2 views
1

Я столкнулся с классом Error Stack»без параметров шаблона»> в то время как я пытаюсь сделать шаблона: Stack классОпределение функций из шаблона класса в C++

template <class T> 
class Stack{      /// Declare A NEW Class NAMED STACK 

private : 
    T* data; 
    int pointer; 
    int size1; 

public : 
    T pop(); 
    T top(); 
    bool push(T); 
    bool isfull(); 
    bool isempty(); 
    Stack(int size1) 
    { 
     this->size1 = size1; 
     pointer = 0; 
     data = new int [size1]; 
    } 
    ~Stack() 
    { 
     delete [] data; 
    } 

}; 

Реальная проблема заключается в что я хочу определить функции Вне класса шаблона !! (Дополнительные читаемости) Но он не работает !!

Вот мой Defenition для одной из функций:

template <class T> 
bool Stack<T>::isfull() 
{ 
if(pointer==size1+1) 
    return true; 

return false; 
} 

Если определение этой функции Входит в блок кода класса, он отлично работает Но ...?!

Это как я называю это в основном: Оператор стека (размер);

+0

Я не вижу здесь ничего, что вызвало бы эту ошибку. Покажите нам, как вы создаете объект класса в основном. – 0x499602D2

+0

какая ошибка вы получаете? – alrikai

+0

Просто любопытно - когда у вас есть 'data = new int [size1];' разве вы не определяете 'data' как' int * ', а не как вы определили его' T * data'? Это не должно давать никаких ошибок, но просто любопытно. – Bill

ответ

3

Вы пропустили <T> из одного из определений ваших функций? То есть есть это:

template <class T> 
bool Stack::isempty() 

вместо этого:

template <class T> 
bool Stack<T>::isempty() 
      ^^^ 
+1

Спасибо !!! Вы очень помогли !!!Я не сохранил заголовок после того, как я его поменял, поэтому компилятор даст эту смешную ошибку! Еще раз спасибо! – Ehsan

0

После программирования C многолетнего ++, я понял, что:

Если вы не как использовать шаблон в C++ вы просто знаете половину C++.

Короче говоря, есть два способа определения класса шаблона:

А. Избавьтесь от CPP файла, Put тела всех функций внутри класса ч файла

B. Put тело функций в файле cpp, но не добавляйте этот файл в проект. И в самом конце файла часов добавить включают строку:

#include "xxxx.cpp" 

вы не должны называть его кастами, вы можете назвать это все, что вы хотите

+0

erm, вы не понимаете это по-другому? Файл '.h' должен быть включен в файл' .cpp'. И не наоборот. –

+0

Включить файл cpp в h-файл является ключевым моментом, я использую iPhone, набрав это, cann't слишком много слов, чтобы объяснить, почему – Gisway

+0

Лучшим методом будет использование другого расширения - '.inc' обычно используется для этого , –

0

Вы не дали нам эта деталь, но вы можете просто ошибиться при попытке реализовать функцию в файле cpp вместо файла заголовка.

Функции шаблона должны быть реализованы в заголовочных файлах.

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