我可以在同一个类中创建对象吗?

时间:2013-10-07 12:16:04

标签: c++ class object instance

我可以在同一个类中创建一个类的对象吗? 如果不是我能做什么?

示例堆栈类

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

};

2 个答案:

答案 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>类型的成员变量。