Когда я искал в Интернете решения
Это твоя проблема. Не пытайтесь искать в Интернете и копировать / вставлять код, который вы не понимаете. Это для после вы закончили.
Я нашел код
Stack<string> stringStack = new Stack<string>();
stringStack.push(17);
int a = stringStack.pop();
Это не скомпилируется. new
предназначен для динамического распределения и возвращает указатель . То, что у вас слева (Stack<string> stringStack
), не является указателем.
«Таинственный» *
, который вы видите, комментируя левую часть (в правильном коде), обозначает указатель. Когда он не является частью типа, это оператор разыменования , что означает «посмотрите, на что указывает этот указатель».
Динамическое выделение памяти должно быть выполнено в парах ... a new
и delete
, в противном случае у вас будет утечка. Кратко продемонстрировано:
{ // a scope begins
int x = 10; // not a pointer; stack allocated
} // a scope ends, integer automatically is gone
{ // a scope begins
int *px = new int; // px points to integer-sized memory box
*px = 10; // put 10 into that box
} // a scope ends, you didn't delete px, you leaked memory
Здесь обсуждается вопрос о том, следует ли вам динамически выделять что-то или нет, и, возможно, вы найдете в нем что-то ценное:
Почему я должен использовать указатель, а не сам объект?
Но, чтобы еще больше сбить вас с толку, если ваш профессор действительно преподавал "современный C ++", то вас предупредили бы о случайном использовании необработанных указателей:
Что такое умный указатель и когда его следует использовать?
Я повторю, что лучшее, что вы можете сделать для себя, - это не пытаться использовать ярлыки, ища решения в Интернете. Следуйте своей курсовой работе с самого начала, и если вы чувствуете, что ваш курс или профессор не хватает, дополните свое образование, пройдя самостоятельно хорошую книгу .