2010-11-05 92 views
1

我相信對於大多數這是一個非常簡單的問題。但我正在爲C++編寫一個用於XML的令牌識別器,我正在使用堆棧來確保有匹配的開始和結束標記。那麼我的標籤是C字符串...C++ - 推送一個C字符串到模板堆棧

char BeginTag[MAX]; 

我想推到我的模板堆棧。但我不確定通過堆棧的類型。我試過...

stack<char> TagStack; 

但是這並不奏效。我已經嘗試了一些其他解決方案,但似乎沒有任何工作。有人能幫我嗎?

回答

3

數組不可分配,因此不能用作容器值類型。

你可以定義包含陣列的結構,雖然和使用:

struct Tag { 
    char name[MAX]; 
}; 

stack<Tag> TagStack; 

或者只是使用你的標籤一個std::string

1

如果您發佈不起作用的代碼,並告訴我們它如何工作,它會有所幫助。 (編譯時錯誤運行時錯誤?)但我的建議是使用的std :: string,至少在堆棧:

using namespace std; 
stack<string> TagStack; 

你應該能夠壓入棧沒有顯式轉換:

TagStack.push(BeginTag); 

注意:我不認可您爲此目的使用C字符串;我也會在標記器中使用std :: string。但那是你的電話。如果繼續使用char數組,可能需要將char [MAX]更改爲char [MAX + 1],因爲MAX通常用於表示字符串中非空字符的最大數目。因此,您需要確保爲終止空值分配了一個額外的字符。這可能只是一個風格問題,但它也可能有助於防止錯誤。

+0

鑑於OP問題中的聲明,不起作用的代碼是'TagStack.push(BeginTag)'。不兼容的類型。 – Cascabel 2010-11-05 20:52:59

+0

我認爲這樣,但海報對於他們所看到的問題應該儘可能清楚。 – 2010-11-05 20:53:59

+0

我想出瞭如何。我需要將teplate的類型作爲字符指針。哪一點是字符串的第一個字符 – Johnrad 2010-11-05 20:55:05