0

C++ 新手,更熟悉 MATLAB 和 Arduino。我正在尝试创建(阅读:修改其他人的代码)一个 C++ 函数以通过串行发送字符数组——它正在与 C 库(rs232.h)交互。在函数初始化中初始化 mode--bits/baud/parity 数组的默认值时,我不断收到此错误。不确定我是否正在尝试做一些不受支持的事情,如果是这样,我可以拆分变量。提前感谢您的帮助。

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;
} 
4

1 回答 1

4

将默认值放在单独的行:

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

于 2018-03-27T14:57:50.000 回答