C ++ - вставка C-строки в стек шаблонов - PullRequest
1 голос
/ 05 ноября 2010

Я уверен, что для большинства это очень простой вопрос. Но я пишу распознаватель токенов для XML на c ++ и использую стек, чтобы убедиться, что есть совпадающие теги начала и конца. Ну, мои теги с строки ...

char BeginTag[MAX];

Я пытаюсь вставить это в мой шаблонный стек. Но я не уверен, какой тип передать стек. Я пытался ...

stack<char> TagStack;

Но это не работает. Я попробовал несколько других решений, но ни одно из них не работает. Кто-нибудь может мне помочь?

Ответы [ 2 ]

3 голосов
/ 05 ноября 2010

Массивы нельзя назначать, поэтому их нельзя использовать как тип значения контейнера.

Вы можете определить структуру , содержащую массив, и использовать это:

struct Tag {
    char name[MAX];
};

stack<Tag> TagStack;

Или просто используйте std::string для своих тегов.

1 голос
/ 05 ноября 2010

Будет полезно, если вы разместите код, который не работает, и расскажите нам, как он не работает.(Ошибка времени компиляции? Ошибка времени выполнения?) Но я предлагаю использовать std :: string, по крайней мере, в стеке:

using namespace std;
stack<string> TagStack;

Вы должны иметь возможность помещать в стек без явного приведения:

TagStack.push(BeginTag);

Примечание: я не одобряю использование вами строк C для этой цели;Я бы также использовал std :: string в токенизаторе.Но это ваш звонок.Если вы продолжите использовать массивы char, вы можете изменить char [MAX] на char [MAX + 1], поскольку обычно MAX используется для обозначения максимального числа ненулевых символов в строке.Следовательно, вам нужно убедиться, что для завершающего нуля выделен один дополнительный символ.Это может быть просто проблема стиля, но это также может помочь предотвратить ошибки.

...