Могу ли я создать объект в том же классе?

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

};
Теги:
class
object
instance

2 ответа

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>.

1

Совершенно нормально создавать объект одного типа внутри класса. Вы должны иметь возможность заставить его работать со 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()
{
    ...
}

и т.д. Вы уверены, что хотите, чтобы это был шаблон? Вы должны поступать так или нет.

  • 0
    Я задаюсь вопросом , как - то будет пытаться поменять себя st
  • 0
    Я думаю, что Раздел 14.6.1 означает, что мы не правы, и он компилируется нормально без <T> на VS2012.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню