0

私は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

4 に答える 4

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);
于 2013-03-11T06:19:18.630 に答える
0

構造体の静力学をどこかで宣言しましたか?あなたのコードから、あなたがそれをしたかどうかは明らかではありません。そうしないと、構造体のインスタンス化だけでは静的メンバーのインスタンス化は得られません。静的メンバーをどこかでインスタンス化する必要があります。何かのようなもの

struct  token_t::TokenString = "foo"; (correct the syntax if wrong)
于 2013-03-11T05:09:10.260 に答える
0

まず、System::String (宣言した String^) には pop_back メソッドがありません。詳細については、MSDNで調べてください。

次に、静的と宣言しました。インスタンスで使用しようとしています。それは一致しません。ほとんどの場合、そのような静的なものは必要ありません。それを除く。

また、-> 演算子を使用して、通常のポインタのように XXX^ 型のメソッドにアクセスする必要があります。

于 2013-03-11T05:51:47.870 に答える
0

矢印アクセス演算子を使用する必要があります。それ以外は、ネイティブ C++ 標準ライブラリの std::string であるかのように System.String を使用しているようです...

于 2013-03-11T05:53:23.027 に答える