C++ const char to char

120
09 августа 2019, 21:50

имею структуру

struct tree
{
    char name[9];
    int count;
};

при попытке определить ее в main

tree.name= "12345678";

Выходит ошибка

error C2440: =: невозможно преобразовать 'const char [9]' в 'char [9]'
    введите сюда код

Присваивал так же с помощью символов '1','2','3' и тд ошибка

 error C2440: =: невозможно преобразовать 'char' в 'char [9]'

Создавал отдельно массив размеров [9] и присваивал его, но была ошибка

error C2059: синтаксическая ошибка: константа
error C2106: =: левый операнд должен быть левосторонним значением

Как же все таки сделать чтоб присвоить и программа не ругалась?

Answer 1

Массивы непосредственно не присваиваются!

Вот так - другое дело:

strcpy(tree.name,"12345678");
Answer 2

В своем вопросе вы говорите о каком-то "определении", но в коде никакого определения не видно.

Если бы вы действительно делали определение объекта типа tree

tree t;

то в таком определении вы могли бы указать инициализатор

tree t = { "12345678" };

или сделать то же самое через через присваивание

t = { "12345678" };

Однако в обоих случаях инициализируется/присваивается весь объект, а не отдельное поле, т.е. происходит обнуление t.count.

Присвоить отдельный голый массив нельзя. Либо используйте std::strcpy, либо замените char name[9]; на std::array<char, 9> (или даже на std::string)

struct tree
{
    std::array<char, 9> name;
    int count;
};
...
t.name = { "12345678" };

Clang принимает просто

t = { "12345678" };

а GCC - нет. В GCC требуется

t = tree{ "12345678" };

Очевидно прав Clang (https://stackoverflow.com/questions/21555026/initializing-stdarraychar-x-member-in-constructor-using-string-literal-gcc)

Answer 3

Если вы напишете так:

struct tree
{
    char name[9] = "12345";
    int count;
};

То здесь char name[9] = "123445"; является определением массива. Это не будет ошибкой. Но вот tree().name = "12345", это уже присваивание, что уже невозможно выполнить (скобки для вызова конструктора)

READ ALSO
imgui OpenGL 3.3 C++ glfw Графичиский интерфейс

imgui OpenGL 3.3 C++ glfw Графичиский интерфейс

Пытаюсь создать приложение с графическим интерфейсом копирую код из стандартного примера визуалки 2017 в визуалку 2010 выдает кучу ошибок линковки...

101
Смена значения XML из кода фрагмента

Смена значения XML из кода фрагмента

В colorxml я имею вот эту строку

111
sql запрос в Hibernate

sql запрос в Hibernate

Всем привет, я создал две таблицы User и Account Один user может иметь несколько аккаунтов

113