0

静的定数文字列配列を初期化して使用するにはどうすればよいですか?例として、ヘッダーを作成しました。

const static string validFileTypesToSendToClient[];

実装:

const string Settings::validFileTypesToSendToClient[] = {"html","css","js"};

これは機能しますが、どうすればこれを使用できますか?たとえば、この場合:

string fileTypesToAllow[] = Settings::validFileTypesToSendToClient;

エラーが発生します:

Initialization with ‘{…}’ expected for aggregate object.

では、文字列の静的定数配列を適切な方法で使用するにはどうすればよいですか?私はすでにこれを見つけました:C ++でconst文字列の静的const配列を初期化していますが、それらはそれを使用する方法を説明していません。

4

4 に答える 4

1

配列を別の配列に割り当てることはできません。要素を1つずつコピーする必要があります。

 string fileTypesToAllow[3];

 for(int i=0; i<3; i++)
 {
    fileTypesToAllow[i] = Settings::validFileTypesToSendToClient[i];
 }

配列にアクセスするには、次のようにします。

std::cout << Settings::validFileTypesToSendToClient[0] << std::endl;

arrayやstd::arrayの代わりにvectorを使用できます

struct Settings
{
  const static std::vector<std::string> validFileTypesToSendToClient;
  static std::vector<std::string> makeData() 
  { 
    std::vector<std::string> v;
    v.push_back("html");
    v.push_back("css");
    v.push_back("js");
    return v;
  }
};

実装:

const std::vector<std::string> Settings::validFileTypesToSendToClient = Settings::makeData();

validFileTypesToSendToClientこれで、簡単にコピーできます。

int main()
{      
  std::vector<std::string> fileTypesToAllow = validFileTypesToSendToClient;
  return 0;
}
于 2012-12-30T10:54:07.560 に答える
1

この行:

string fileTypesToAllow[] = Settings::validFileTypesToSendToClient;

間違っている。C / C ++では、配列の割り当ては許可されていません。配列をポインタに割り当てることはできますが、別の配列を割り当てることができます。

于 2012-12-30T10:54:25.037 に答える
1

組み込みの配列割り当てはC++には存在しません。ただし、これを行うことはできます。

#include <array>
#include <string>

std::array<std::string, 3> string_array = 
{
  "foo", 
  "bar", 
  "baz", 
};

int main()
{
  std::array<std::string, 3> second_string_array = string_array;
}

C ++ 11ですが、最近ではほとんどすべてのコンパイラでサポートされています。(そもそもなぜそのような配列をコピーしたいのか疑問に思われます。また、これは、const char *の割り当てを確実に忘れることができますが、const char *の使用を検討した場合の1つです。)

于 2012-12-30T11:00:47.257 に答える
1

次の行では、文字列の新しい配列を宣言し、別の配列で初期化しようとしています。これはC++では許可されていません。

string fileTypesToAllow[] = Settings::validFileTypesToSendToClient;

代わりに、配列を宣言してから、値をコピーする必要があります。

const int size = 3; // Same as the size of the Settings::validFileTypesToSendToClient array
string fileTypesToAllow[size];

for(int i = 0; i < size; i++)
{
    fileTypesToAllow[i] = Settings::validFileTypesToSendToClient[i];
}
于 2012-12-30T11:04:58.810 に答える