2010-11-05 3 views
1

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

char BeginTag[MAX]; 

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

stack<char> TagStack; 

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

ответ

3

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

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

struct Tag { 
    char name[MAX]; 
}; 

stack<Tag> TagStack; 

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

1

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

using namespace std; 
stack<string> TagStack; 

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

TagStack.push(BeginTag); 

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

+0

Код, который не работает, является 'TagStack.push (BeginTag)', учитывая объявления в вопросе OP. Несовместимые типы. – Cascabel

+0

Я понял как таковой, но лучше, чтобы плакаты были настолько четкими, насколько это возможно, о проблемах, которые они видят. –

+0

Я понял, как. Мне нужно, чтобы тип тарелки был указателем на символ. Какая точка относится к первому символу строки – Johnrad

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