我可以在同一个类中创建一个类的对象吗? 如果不是我能做什么?
示例堆栈类
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);
}
};
答案 0 :(得分:1)
在类中创建相同类型的对象是完全可以的。您应该可以使用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()
{
...
}
等。您确定要将此作为模板吗?你应该正确地做或不做。
答案 1 :(得分:1)
没有模板,这很好,例如。
class stack
{
public: //<-- added so we can use this
void push(int d)
{
//...
}
int pop()
{
//...
}
void sort()
{
stack st;
st.push(4);
}
};
现在,在你模板化的情况下,你将需要可以告诉sort函数要做什么样的堆栈。
void sort()
{
stack<T> st;
//---^^^
st.push(4);
}
更多编辑 第14.6.1节
“注入类名称可以使用或不使用 模板参数列表。什么时候使用没有 template-argument-list,相当于inject-class-name 后跟括在其中的类模板的模板参数 &LT;&GT;“
所以,你可以说stack st;
但是,您将无法拥有stack<T>
类型的成员变量。