кодовые блоки — ошибка функции C ++ — не удалось преобразовать заключенный в скобки список инициализаторов в char *

Новичок в C ++, больше знаком с MATLAB и Arduino. Я пытаюсь создать (читай: изменить чужой код) функцию C ++ для отправки массива символов через последовательный интерфейс — он взаимодействует с библиотекой C (rs232.h). Я продолжаю получать эту ошибку при инициализации значения по умолчанию для режима — биты / бод / массив четности в функции инициализации. Не уверен, что я пытаюсь сделать что-то, что не поддерживается, если это так, я могу разделить переменные. Заранее благодарю за любую помощь.

IDE: Код :: Блоки

Компилятор: MinGW-g ++ / GCC 7.3

Ошибки:

error: could not convert '{'8', 'N', '1', 0}' from '<brace-enclosed initializer list>' to 'char*'

Код:

#include <stdlib.h>
#include <stdio.h>
#include <Windows.h>
#include "rs232.h"#include <string> /* Probably unnecessary */

bool Write(char (&toWrite)[256], int portNum=3, int bdrate=9600, char mode[]={'8','N','1','\0'})
{
int i, cport_nr = portNum - 1;
if(RS232_OpenComport(cport_nr, bdrate, mode))
{
return false;
}
while(1)
{
RS232_cputs(cport_nr, toWrite);
printf("sent: %s\n", toWrite);
Sleep(1000);
i++;
i %= 2;
}
return true;
}

0

Решение

Поместите значение по умолчанию в отдельной строке:

bool Write(char (&toWrite)[256], int portNum=3, int bdrate=9600, char *mode=NULL) {
char mode_default[] = {'8','N','1','\0'};
if (mode == NULL) mode = mode_default;

Причина:

Вы не можете использовать значения по умолчанию с параметрами массива C (которые действительно распадаются здесь на указатели) — UnholySheep

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]