2013-03-11 60 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