2013-03-11 78 views
0

我正在研究C++/Cli項目,所以我定義了我的結構。C++ CLI錯誤C2228

ref struct token_t 
    { 
    public : 
     static TokenTypes_t TokenType;  ///enum class 

     static String^ TokenString; ///enum class 

     static Keyword_t KeywordID; ///enum class 

     static int  IntVal;  
     static char  CharVal;  

     static Operator_t OprID;  ///enum class 

    }; 

我通過這個結構作爲函數參數的實例,但是當我試圖做這樣的事情:token.TokenString.pop_back();它說:

Error 11 error C2228: left of '.pop_back' must have class/struct/union 
+0

我不使用C++/CLI,但我猜你需要對託管指針使用箭頭。 – chris 2013-03-11 05:05:53

+0

使用' - >'而不是'.' – 2013-03-11 05:07:57

+0

我不能說它說pop_back不是System :: TokenString的成員 – 2013-03-11 05:18:03

回答

0

你某處聲明結構靜力學?從你的代碼中可以看出,如果你這樣做或者沒有。如果你沒有,那麼僅僅結構實例化就不會讓你獲得靜態成員實例化。您需要實例化靜態成員某處。類似於

struct token_t::TokenString = "foo"; (correct the syntax if wrong) 
+0

好的,但我應該在哪裏做到這一點?!在函數中? – 2013-03-11 05:16:46

+0

沒有stil不工作。我發佈了代碼 – 2013-03-11 06:46:25

+0

我錯過了你發佈的代碼。 將上面寫的行放在C++源文件中,而不是任何函數。通常你將該行放入定義該類的文件中。你不能把它放到標題中,因爲那樣你會得到多個靜態副本。 – Amit 2013-03-13 02:45:15

0

首先,System :: String(您聲明的String ^)沒有pop_back方法。查看MSDN瞭解更多信息。

其次,你聲明它是靜態的。您正試圖將它與一個實例一起使用。那不匹配。最有可能的是,你不需要任何靜態的東西。去掉它。

您還需要使用 - >運算符訪問XXX ^類型的方法,就好像它是普通指針一樣。

+0

**您還需要使用 - >運算符來訪問XXX ^類型的方法,就像它是一個普通指針一樣** 我沒有得到這部分,你能解釋一下嗎? – 2013-03-11 06:10:41

+0

如果你有一個變量「String^text;」,你需要調用「text-> Trim();」用指針運算符( - >)代替非指針的正常點。 「text.Trim();」不會編譯。 – nvoigt 2013-03-11 06:19:52

+0

我使用了( - >),但它只是不工作:/ – 2013-03-11 06:32:00

0

您需要使用箭頭訪問運算符。其他然後,你似乎使用System.String,如果它是的std ::從本地C++標準庫串...

+0

任何想法如何訪問pop_back? – 2013-03-11 06:12:21

+0

由於沒有任何內容,因此無法訪問pop_back。使用System :: String API。 – 2013-03-11 06:23:30

0

OK,幾件事情:

  • String^是引用類型,你調用方法時,需要使用->而不是.
  • 字符串類沒有方法pop_back
  • TokenString被聲明爲static,因此訪問它的正確方法是token_t::TokenString。如果它是靜態的,它不會與特定的類型實例關聯,只與類型本身有關。
  • 您已將類型聲明爲ref struct。這是完全有效的,但令人困惑。 ref勝過struct,所以你有什麼是ref class相同。如果你想要一個結構(即一個值類型,而不是引用類型),你應該說value struct token_t。 (value class將給出與value struct相同的結果,但這又令人困惑。)
  • String類的正確成員是SubString和Length。因此,從字符串中刪除最後一個字符的行應該是這樣的:token_t::TokenString = token_t::TokenString->SubString(0, token_t::TokenString->Length - 1);
+0

錯誤9 \t錯誤C2227:' - > SubString'的左側必須指向class/struct/union/generic類型 – 2013-03-11 06:30:18