C ++ CLI错误C2228

时间:2013-03-11 05:04:43

标签: c++-cli

我正在开发一个C ++ / Cli项目,所以我像这样定义了我的结构。

  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

4 个答案:

答案 0 :(得分:0)

你是否在某处声明了struct statics?如果您这样做,那么从您的代码中就不明显了。如果你没有,那么单纯的struct instantiation就不会让你获得静态成员实例化。您需要在某处实例化静态成员。像

这样的东西
struct  token_t::TokenString = "foo"; (correct the syntax if wrong)

答案 1 :(得分:0)

首先,System :: String(您声明的String ^)没有pop_back方法。请在MSDN上查找以获取更多信息。

其次,你宣布它是静态的。您正尝试将其与实例一起使用。那不匹配。最有可能的是,你不需要任何静态的东西。去掉它。

您还需要使用 - >访问XXX ^类型的方法。运算符,好像它是一个普通的指针。

答案 2 :(得分:0)

您需要使用箭头访问运算符。除此之外,您似乎使用System.String,就好像它是来自本机C ++标准库的std :: string ...

答案 3 :(得分:0)

好的,好几件事:

  • 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);