Могу ли я создать объект класса в том же классе? Если нет, что я могу сделать?
пример класса стека
template <class T>
class stack
{
void push(T d)
{
...
}
T pop()
{
...
}
//my question is about this one
void sort()
{
// I get errors when I do that ?
stack st;
st.push(4);
}
};
Без шаблонов это нормально, например
class stack
{
public: //<-- added so we can use this
void push(int d)
{
//...
}
int pop()
{
//...
}
void sort()
{
stack st;
st.push(4);
}
};
Теперь, в вашем шаблоном случае, вам нужно будет указать функцию сортировки, какую стек сделать.
void sort()
{
stack<T> st;
//---^^^
st.push(4);
}
больше редактировать Раздел 14.6.1
"Имя введенного класса может использоваться с или без списка шаблонов-аргументов. Когда он используется без списка шаблонов-аргументов, он эквивалентен имени введенного класса, за которым следуют шаблонные параметры шаблон класса, заключенный в <>. "
Итак, вы можете сказать stack st;
Однако вы не сможете иметь переменную-член типа stack<T>
.
Совершенно нормально создавать объект одного типа внутри класса. Вы должны иметь возможность заставить его работать со stack<T>
, как это
template <class T>
class stack
{
...
void sort()
{
stack<T> st;
st.push(4);
}
...
};
Кажется, что stack st;
является правильным в соответствии с последними стандартами C++, но, возможно, ваш компилятор еще не реализовал эту часть стандарта C++.
Сказав это, не ясно из вашего опубликованного кода, почему это шаблон. Если бы это был шаблон, который я ожидал увидеть
void push(const T& x)
{
...
}
T pop()
{
...
}
и т.д. Вы уверены, что хотите, чтобы это был шаблон? Вы должны поступать так или нет.
st