Ошибка функции 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;
} 

1 ответ

Решение

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

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

Другие вопросы по тегам