测试库时出现 c++ 错误

c++ Error when Testing library

本文关键字:c++ 错误 测试      更新时间:2023-10-16

我正在创建一个Arduino库,它为我的个人项目需要两个构造函数,但由于某种原因,我不断收到特定于类型的错误,首先让我向您展示结构如何进行。 所以这是我的文件:

这是头文件:

#ifndef iGA_H
#define iGA_H
 class iGA {
   public:
         getParameters(int soundA[], int soundB[], int parentId[]);
   private:
         int _soundA[];
         int _soundB[];
         int _parentId[];
 }

CPP 文件:

#include <iGA.h>
iGA::getParameters(int soundA[], int soundB[], int parentId[])
{
  _soundA = soundA;
  _soundB = soundB;
  _parentId = parentId;
 }

这就是我在 setup() 函数中调用草图中构造函数的方式:

#include <iGA>
iGA iga;
void setup() {
  iga.getParameters(r, r1 , r2);
}

这是错误:

In file included from /home/bargros/Dropbox/iGA__NewBild/iGA__NewBild.ino:34:0:/home/bargros/Arduino/libraries/iGA/iGA.h:10:58: error: ISO C++ forbids declaration of 'getParameters' with no type [-fpermissive]getParameters(int soundA[], int soundB[], int parentId[]);

我知道该错误与参数类型有关,或者我错误地调用了构造函数,但我也尝试像这样调用它:

iGA iga = getParameters(etc,etc,etc);

我对 C++ 相对较新,我对这个错误告诉我什么有点无知。有没有人知道为什么会这样?

我相信两个问题:

问题 1:您的函数应该返回正确的东西? 如果它只是想将参数分配给私有成员(在您的情况下,它是一个setter而不是get,您可能希望将其设置为 void)。在类内部和编写其定义时在适当的位置添加void

问题 2:我认为您不能将array[]作为参数发送。我假设你已经知道大小了。相反,您需要发送一个指针,该指针指向数组的第一个元素以及整个数组的大小。然后,收到参数后,对于每个私有成员,您可以创建一个具有接收大小的新数组(或直接填充私有成员),并通过使用接收的指针迭代接收的数组来填充值。

编辑:我刚刚检查并通过int array[]应该没问题。因此,修复问题一将解决您的问题。有关更多文档,请参阅此处

在C++中,你必须明确一个函数不返回任何内容,你可以通过说它返回void来做到这一点:

getParameters(int soundA[], int soundB[], int parentId[]);

需要

void getParameters(int soundA[], int soundB[], int parentId[]);

iGA::getParameters(int soundA[], int soundB[], int parentId[])

需要

void iGA::getParameters(int soundA[], int soundB[], int parentId[])