我可以在同一个类中创建一个类的对象吗?如果不是我该怎么办?
示例堆栈类
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);
}
};
在类中创建相同类型的对象是完全可以的。您应该可以使用它stack<T>
,就像这样
template <class T>
class stack
{
...
void sort()
{
stack<T> st;
st.push(4);
}
...
};
根据最新的 C++ 标准,这似乎stack st;
是正确的,但可能您的编译器尚未实现 C++ 标准的这一部分。
话虽如此,从您发布的代码中尚不清楚为什么这是一个模板。如果它是一个模板,我希望看到
void push(const T& x)
{
...
}
T pop()
{
...
}
等等。您确定要将其作为模板吗?你应该正确地或根本不这样做。
没有模板这很好,例如
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>
。