12

私はC ++にまったく慣れていないので、我慢してください。静的配列を持つクラスを作成し、メインからこの配列にアクセスしたいと考えています。これが私がC#でやりたいことです。

   namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                Class a = new Class();
                Console.WriteLine(a.arr[1]);

            }
        }
    }

    =====================

    namespace ConsoleApplication1
    {
        class Class
        {       
            public static string[] s_strHands = new string[]{"one","two","three"};
        }
    }

これが私が試したことです:

// justfoolin.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

class Class {

  public:
      static string arr[3] = {"one", "two", "three"};
};


int _tmain(int argc, _TCHAR* argv[])
{
    Class x;
    cout << x.arr[2] << endl;
    return 0;
}

しかし、私は得ました:IntelliSense:データメンバー初期化子は許可されていません

4

4 に答える 4

18

後で初期化を実行する必要があります。クラス定義内でクラス メンバーを初期化することはできません。(可能であれば、ヘッダー ファイルで定義されたクラスによって、各翻訳単位がメンバーの独自のコピーを定義し、リンカが混乱して整理されなくなります。)

class Class {
  public:
      static string arr[];
};

string Class::arr[3] = {"one", "two", "three"};

クラス定義は、実装とは別のインターフェースを定義します。

于 2012-06-07T16:36:51.323 に答える
2

次のように、グローバル変数であるかのように、クラスの外部で静的メンバーを初期化する必要があります。

class Class { 

  public: 
      static string arr[3];
}; 

string Class::arr = {"one", "two", "three"}; 
于 2012-06-07T16:38:16.833 に答える
1

クラス定義で初期化できるのは、静的な整数型のデータ メンバーのみです。静的データ メンバーのタイプstringは であるため、インラインで初期化できません。

クラス定義の外で定義し、そこで初期化する必要がありますarr宣言から初期化子を削除し、クラスの後に次を削除する必要があります。

string Class::arr[3] = {"one", "two", "three"};

クラスがヘッダー ファイルで定義されている場合、その静的データ メンバーは 1 つのソース (.cpp) ファイルで定義する必要があります。

また、Visual Studio のエラー一覧に表示されるすべてのエラーがビルド エラーであるとは限りません。特に、"IntelliSense:" で始まるエラーは、IntelliSense が検出したエラーです。IntelliSense とコンパイラは常に一致するとは限りません。

于 2012-06-07T16:37:26.390 に答える
0

クラス宣言の外で静的メンバーを初期化する必要があります。

string Class::arr[3] = {"one", "two", "three"};
于 2012-06-07T16:38:12.057 に答える