Инициализация char[] структуры элементом массивом const char[][]
вроде конст чар передаётся в структуру для создания массива, но пишет ошибку. Так же менял мпссив на неконстантный двумерный массив чар. Подскажите пожалуйста что может быть не так.
const char strings[10][10]{"one","two","three"..."ten"};
struct struct_one{
char val[20];
double k;
};
void main(){
struct_one s1("one", 2323.23);
struct_one s2(strings[1], 234.3);
// на этой строке error: array must be initialized with a braсe-enclosed initializer
std::cout << strings[0] << std::endl;
//хотя вывод элемента корректный
}
Ответы (1 шт):
Автор решения: NunOfIt
→ Ссылка
Массивы в C++ являются некопируемыми объектами, а вы по сути передаёте в констуктор массив const char[4] и пытаетесь его присвоить другому массиву, из-за этого и возникает ошибка. Тут без циклического копирования (ну или memcpy, что по сути одно и то же) не обойтись. Ну или используёте std::string вместо масиива char.
const char strings[10][10] { "one", "two", "three", "four", "five", "seven", "eight", "nine", "ten" };
struct struct_one{
char val[20];
double k;
template<size_t S>
struct_one(const char (&val)[S], double k): k(k) {
for(int i = 0; i < S; ++i)
this->val[i] = val[i];
}
};
int main(){
char str[] = "one";
struct_one s0(str, 2323.23);
struct_one s1("one", 2323.23);
struct_one s2(strings[1], 234.3);
std::cout << s0.val << '\n';
std::cout << s1.val << '\n';
std::cout << s2.val << '\n';
std::cout << strings[0] << '\n';
std::cout << strings[1] << '\n';
return 0;
}