我相信對於大多數這是一個非常簡單的問題。但我正在爲C++編寫一個用於XML的令牌識別器,我正在使用堆棧來確保有匹配的開始和結束標記。那麼我的標籤是C字符串...C++ - 推送一個C字符串到模板堆棧
char BeginTag[MAX];
我想推到我的模板堆棧。但我不確定通過堆棧的類型。我試過...
stack<char> TagStack;
但是這並不奏效。我已經嘗試了一些其他解決方案,但似乎沒有任何工作。有人能幫我嗎?
我相信對於大多數這是一個非常簡單的問題。但我正在爲C++編寫一個用於XML的令牌識別器,我正在使用堆棧來確保有匹配的開始和結束標記。那麼我的標籤是C字符串...C++ - 推送一個C字符串到模板堆棧
char BeginTag[MAX];
我想推到我的模板堆棧。但我不確定通過堆棧的類型。我試過...
stack<char> TagStack;
但是這並不奏效。我已經嘗試了一些其他解決方案,但似乎沒有任何工作。有人能幫我嗎?
數組不可分配,因此不能用作容器值類型。
你可以定義包含陣列的結構,雖然和使用:
struct Tag {
char name[MAX];
};
stack<Tag> TagStack;
或者只是使用你的標籤一個std::string
。
如果您發佈不起作用的代碼,並告訴我們它如何工作,它會有所幫助。 (編譯時錯誤運行時錯誤?)但我的建議是使用的std :: string,至少在堆棧:
using namespace std;
stack<string> TagStack;
你應該能夠壓入棧沒有顯式轉換:
TagStack.push(BeginTag);
注意:我不認可您爲此目的使用C字符串;我也會在標記器中使用std :: string。但那是你的電話。如果繼續使用char數組,可能需要將char [MAX]更改爲char [MAX + 1],因爲MAX通常用於表示字符串中非空字符的最大數目。因此,您需要確保爲終止空值分配了一個額外的字符。這可能只是一個風格問題,但它也可能有助於防止錯誤。
鑑於OP問題中的聲明,不起作用的代碼是'TagStack.push(BeginTag)'。不兼容的類型。 – Cascabel 2010-11-05 20:52:59
我認爲這樣,但海報對於他們所看到的問題應該儘可能清楚。 – 2010-11-05 20:53:59
我想出瞭如何。我需要將teplate的類型作爲字符指針。哪一點是字符串的第一個字符 – Johnrad 2010-11-05 20:55:05