错误:调用对象不匹配
error: no match for call to
嗨,我正在尽最大努力了解C++和OOP。 我已经编写了一些代码,当我将它们全部放在我的主循环中时,这些代码可以工作。 我现在正在尝试整理它并制作自己的简单库和类。
我的项目有一个连接到 Arduino 板的 8 LED 传感器阵列。 我正在尝试读取光传感器的状态。 我正在使用 QTRSensors 库,它有一个校准方法,我想在实例化我的类时从我的类调用该方法。
目前我有以下代码。
页眉
#ifndef SEDIMENTLOGGER_H
#define SEDIMENTLOGGER_H
#include <QTRSensors.h>
#include <Arduino.h>
#define NUM_SENSORS 8
class sedimentSensor
{
public:
QTRSensorsRC sensor1;//(unsigned char [8], int&, int&, int&);
QTRSensorsRC sensor2;//(unsigned char [8], int&, int&, int&);
sedimentSensor(); //default constructor
~sedimentSensor();
void calibrateSensors();
unsigned int *SensorValues1(){return sensorValues1;};
unsigned int *SensorValues2(){return sensorValues2;};
int SampleDelay(){return sampleDelay;};
int EmitterPin1();
unsigned int Position1(){return position1;};
void Position1(unsigned int value){position1 = value;};
unsigned int Position2(){return position2;};
void Position2(unsigned int value){position2 = value;};
private:
// Map pins to LED numbers
// first LED array
int led1;
int led2;
int led3;
int led4;
int led5;
int led6;
int led7;
int led8;
int emitterPin1;
//second Array
int led9;
int led10;
int led11;
int led12;
int led13;
int led14;
int led15;
int led16;
int emitterPin2;
int timeout; // waits for 2.5 seconds for sensor outputs to go low
long sampleDelay; // 1 second
int numSensors;
unsigned int sensorValues1[];
unsigned int sensorValues2[];
unsigned int position1;
unsigned int position2;
};
#endif
我对类实现的尝试
#include "sedimentLogger.h"
#include <Arduino.h>
#include <QTRSensors.h>
sedimentSensor::sedimentSensor()
{
//Constructor
led1 = 24;
led2 = 26;
led3 = 28;
led4 = 30;
led5 = 32;
led6 = 34;
led7 = 36;
led8 = 38;
emitterPin1 = 22;
//second Array
led9 = 25;
led10 = 27;
led11 = 29;
led12 = 31;
led13 = 33;
led14 = 35;
led15 = 37;
led16 = 39;
emitterPin2 = 23;
timeout = 2500; // waits for 2.5 seconds for sensor outputs to go low
sampleDelay = 1000; // 1 second
sensorValues1[NUM_SENSORS];
sensorValues2[NUM_SENSORS];
};
sedimentSensor::~sedimentSensor()
{
};
int sedimentSensor::EmitterPin1()
{return emitterPin1;};
void sedimentSensor::calibrateSensors()
{
sensor1((unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},numSensors,timeout,emitterPin1);
sensor2((unsigned char[]) {led9,led10,led11,led12,led13,led14,led15,led16},numSensors,timeout,emitterPin2);
unsigned int _delay = 500;
delay(_delay);
pinMode(13,OUTPUT);
for(int i = 0; i<400; i++)
{
sensor1.calibrate();
sensor2.calibrate();
}
digitalWrite(13,LOW);
//TODO WRITE MAX AND MIN VALS TO FILE
Serial.print("Array 1 Min :: ");
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print (sensor1.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.print("Array 2 Min :: ");
for (int i = 0;i< NUM_SENSORS; i++)
{
Serial.print (sensor2.calibratedMinimumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.print("array 1 Max :: ");
// print the calibration maximum values measured when emitters were on
for (int i = 0; i < NUM_SENSORS; i++)
{
Serial.print(sensor1.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.print("array 2 Max :: ");
// print the calibration maximum values measured when emitters were on
for (int
i = 0; i < NUM_SENSORS; i++)
{
Serial.print(sensor2.calibratedMaximumOn[i]);
Serial.print(' ');
}
Serial.println();
Serial.println();
delay(_delay);
};
和我的主要功能和循环
#include <QTRSensors.h>
#include <Arduino.h>
#include "sedimentLogger.h"
#include <Wire.h>
#include "/home/marrabld/Programming/Arduino/arduino-1.0/libraries/RTClib/RTClib.h"
sedimentSensor sedLog;//= sedimentSensor();
void setup()
{
Serial.begin(9600);
sedLog.calibrateSensors();
}
void loop()
{
sedLog.Position1(sedLog.sensor1.readLine(sedLog.SensorValues1()));
sedLog.Position2(sedLog.sensor2.readLine(sedLog.SensorValues2()));
unsigned char i;
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(sedLog.SensorValues1()[i] * 10/10001);
Serial.print(' ');
}
Serial.println(sedLog.Position1());
for (i=0;i < NUM_SENSORS; i++)
{
Serial.print(sedLog.SensorValues2()[i]*10/1001);
Serial.print(' ');
}
Serial.print(" ");
Serial.println(sedLog.Position2());
delay(sedLog.SampleDelay());
Serial.println(sedLog.SampleDelay());
Serial.println(sedLog.EmitterPin1());
}
我得到以下错误
sedimentLogger.cpp:在成员函数'void sedimentSensor::calibrateSensors(('中:sedimentLogger.cpp:47:102:错误:对"(QTRSensorsRC( (无符号字符 [8], int&, int&, int&("的调用不匹配sedimentLogger.cpp:48:108:错误:对"(QTRSensorsRC( (无符号字符 [8], int&, int&, int&("的调用不匹配
我已经尝试了几种不同的变体,例如将传感器实例化放在我的 sedimentSensor 构造函数中以及许多其他没有运气的事情。
我将不胜感激任何帮助和建议,使其发挥作用。 我在这里显然也缺少一个概念,所以任何教练建议都会有所帮助。
似乎您正在尝试调用 sensor1
和 sensor2
的构造函数,但在代码中的这一点上,它们已经被构造好了。尝试改用他们的init
函数:
sensor1.init(
(unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},
numSensors,
timeout,
emitterPin1);
sensor2.init(
(unsigned char[]){led9,led10,led11,led12,led13,led14,led15,led16},
numSensors,
timeout,
emitterPin2);
我假设第 47 行和第 48 行是以下两行:
sensor1((unsigned char[]){led1,led2,led3,led4,led5,led6,led7,led8},numSensors,timeout,emitterPin1);
sensor2((unsigned char[]) {led9,led10,led11,led12,led13,led14,led15,led16},numSensors,timeout,emitterPin2);
问题是你尝试将对象作为函数调用。对象需要在构造函数中初始化,如下所示:
sedimentSensor::sedimentSensor()
: led1(24), led2(26), /* other variables needing initialization */
sensor1(/*arguments*/), sensor2(/*arguments*/)
{
/* .... */
}
要使上述工作正常工作,您需要更改类成员变量声明的顺序,因为成员变量初始化的顺序与声明它们的顺序相同。换句话说,您应该将 sensor1
和 sensor2
的声明放在用于初始化它们的变量之后。
- Qt SQLite没有查询或参数计数不匹配
- 模板参数推导失败,函数参数/参数不匹配
- 在使用累加时,C++中的运算符+不匹配
- C++ 与操作员不匹配<<
- 在 Arduino 上使用 sscanf 会导致与 const char * 不匹配,并且返回值始终相同,尽管输入值不同
- 与'operator='不匹配(操作数类型'String'且"void")
- std::使用内部对象移动 - 与调用不匹配
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- 与操作数<传递对象不匹配
- 检测到来自同一 Visual Studio 2015 项目的源文件的对象文件的'RuntimeLibrary'不匹配
- 声明后初始化对象时"调用不匹配"
- 运行时库不匹配,尽管将正确的标志传递给所有对象?
- 我不明白多线程游戏中的对象不匹配
- 为什么函数中的对象输入不匹配但仍然有效
- 错误:调用对象不匹配
- 包含派生对象的QPointer和基类不匹配
- 在单独的文件夹中编译对象,隐式规则不匹配
- C++与自定义对象数组中的'operator='不匹配
- 从类返回模板化对象,模板类型不匹配
- C++,具有对象列表的对象:与"运算符=="不匹配