0

我可以在同一个类中创建一个类的对象吗?如果不是我该怎么办?

示例堆栈类

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);
}

};
4

2 回答 2

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()
{
    ...
}

等等。您确定要将其作为模板吗?你应该正确地或根本不这样做。

于 2013-10-07T12:26:12.603 回答
1

没有模板这很好,例如

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>

于 2013-10-07T12:27:07.673 回答