инициализировать и переназначить строку в C++ Borland Builder

Я делаю следующее:

string strarr[]={"","",""};
if (a==b)
{
  strarr={"a","b","c"};
}
else
{
  strarr={"d","e","f"};
}

И я получил синтаксическую ошибку выражения в строке переназначения на strarr.

Есть идеи, почему?

И что я могу сделать для инициализации вместо:

string strarr[]={"","",""};

Я использую Borland C++Builder 6.


person user687459    schedule 06.10.2015    source источник
comment
вы можете установить массив сразу только один раз (как его объявление + определение)! если вам нужны разные конфигурации инициализации, вы можете использовать прагмы #define #ifndef,#ifdef,#endif, но вы не можете использовать значение переменной в качестве условия. Если вам нужно изменить значения массива во время выполнения, вам нужно сделать это по одному... Если строки не меняются, вы можете вместо этого использовать указатель на разные массивы const   -  person Spektre    schedule 08.10.2015


Ответы (2)


Насколько мне известно, синтаксис фигурных скобок используется только при инициализации массива для каждого компилятора C++. Таким образом, вы не можете использовать его для переназначения. Вместо этого вы можете использовать цикл или поэлементное назначение.

Если количество значений, которые вы хотите присвоить, является постоянным, и их значение постоянно, вы можете поместить их в постоянный массив и выполнить итерацию по нему, чтобы заполнить ваш массив starr[].

person Zdravko Donev    schedule 07.10.2015

Я получил синтаксическую ошибку выражения в строке переназначения на strarr

Есть идеи, почему?

Вы не можете переназначить сам массив после его инициализации. Вы можете только переназначить его элементы, например:

string strarr[]={"","",""};
if (a==b)
{
  strarr[0] = "a";
  strarr[1] = "b";
  strarr[2] = "c";
}
else
{
  strarr[0] = "d";
  strarr[1] = "e";
  strarr[2] = "f";
}

И что я могу сделать для инициализации вместо:

строка strarr[]={"","",""};

std::string имеет конструктор по умолчанию, который инициализирует его пустым значением, поэтому нет необходимости явно инициализировать его "" вообще. Удалите начальные значения и укажите размер массива. Пусть компилятор вызовет конструкторы за вас:

string strarr[3];
person Remy Lebeau    schedule 08.12.2015