2014-12-15 3 views
-3

Короткий и сладкий: я пытаюсь использовать STL-стек C++ таким образом, чтобы принимать общие переменные. На основе кода, который я нашел в Интернете, я пытаюсь это:Как создать стек STL Используйте параметр шаблона?

template <class T> 
class ingredient{}; 
stack <ingredient> Sandwich; 

Наглядно, это кажется, что это должно работать, но я получаю сообщение об ошибке «недопустимый декларации». Что я делаю не так?

+1

У вас нет класса 'component'; у вас вместо этого есть класс 'component '. Вам нужно создать экземпляр 'stack' с' stack > 'для некоторого типа' T'. – jamesdlin

ответ

4

std::stack, а также другие стандартные контейнеры должны быть созданы с использованием конкретного типа. Так если предположить, что у вас есть

class ingredient {}; 

Вы объявляете пачку ингредиентов:

std::stack<ingredient> Sandwich; 

Если ingredient сам является шаблоном, вы должны указать это параметр при создании экземпляра стека:

std::stack<ingredient<int>> Sandwich; 
+0

Благодарим за ответ, но на самом деле это не решает проблему. Я обновил код, чтобы включить компонент класса {}; и изменил параметр стека, как было предложено, и он все еще дает мне ошибки. – Mock

+0

@Mock Необходимо указать ошибки. Я предполагаю, что вам нужно «#include » и префикс вашего объявления с помощью 'std ::' как в этом ответе. – Galik

+0

Это похоже на это, спасибо. – Mock

1

ingredient не является типом. ingredient<T> - это тип.

Вам нужно использовать другой тип, который будет использоваться для определения ingredient.

Например:

struct Ham {}; 

stack <ingredient<Ham>> Sandwich; 
1

Вы не делаете. stack - template, который принимает тип в качестве своего первого параметра. Вы не можете дать ему template.

Вы можете получить что-то вроде boost::any или boost::variant и сохранить их в stack. variant - это меченый союз с вспомогательными функциями, который может хранить один из множества типов. any - это оболочка семантики значений типа безопасная вокруг грубого эквивалента void*: вы можете получить значение, но только если вы знаете точный тип.

Смежные вопросы