Arduino - C++对象构造函数错误
Arduino - C++ Object Constructor Error
我正在尝试调试我的一些arduino代码,并不断收到与对象构造函数相关的错误。我相信我已经正确定义了所有内容并提供正确的输入,但我仍然无法获得要编译的代码。
我粘贴了下面的错误和代码。请注意,我已经删除了"数据控制"类中的一些源代码。另请注意,CDOS_Info是我创建的结构。
感谢您的任何帮助!
错误:
Arduino: 1.6.5 (Windows 7), Board: "Arduino Uno"
C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSStateController.cpp: In constructor 'StateController::StateController(CDOS_Info*)':
C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSStateController.cpp:19:58: error: no matching function for call to 'DataControl::DataControl()'
StateController::StateController(CDOS_Info *inputtedInfo)
^
C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSStateController.cpp:19:58: note: candidates are:
In file included from C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSStateController.h:16:0,
from C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSStateController.cpp:13:
C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSDataControl.h:19:3: note: DataControl::DataControl(CDOS_Info*)
DataControl(CDOS_Info *inputtedInfo);
^
C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSDataControl.h:19:3: note: candidate expects 1 argument, 0 provided
C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSDataControl.h:16:7: note: DataControl::DataControl(const DataControl&)
class DataControl
^
C:UsersA5KW5ZZDesktoparduino-1.6.5-r2-windowsarduino-1.6.5-r2librariesCDOSDataControl.h:16:7: note: candidate expects 1 argument, 0 provided
Error compiling.
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
法典
主要:
/***********************************************
*********** Import Libraries ******************
***********************************************/
#include "CDOS_Definitions.h"
#include "ConfigInit.h"
#include "SensorSerialInterface.h"
#include "StateController.h"
#include "OutputInterface.h"
#include <SoftwareSerial.h>
/***********************************************
******* Declare datatypes/objects *************
***********************************************/
CDOS_Info info; // Datatype holds general information regarding the CDOS
CDOS_Info * infoPointer = &info; // Declare and define a pointer of the CDOS_Info datatype
ConfigInit configInit(infoPointer); // Configures & initializes the CDOS
SensorSerialInterface sensorInterface(infoPointer); // Controls the communications between the Arduino and IMU
StateController stateController(infoPointer); // Transitions the CDOS between various states
OutputInterface outputMessage(infoPointer); // Outputted serial message providing status information to a computer terminal
/***********************************************
*************** Main Program *****************
***********************************************/
void setup(){
configInit.config();
configInit.init();
sensorInterface.setAllOutput(); // Force IMU to output status of accelerometer, gyroscope, and magnetometer
}
void loop(){
sensorInterface.readAll(info.accelXYZ, info.gyroXYZ, info.magXYZ); // Get sensor data
stateController.routine(); // Jump into state transition logic
outputMessage.outputSerial(); // Output CDOS status info
}
状态控制器标头:
#ifndef StateController_h
#define StateController_h
#include "CDOS_Definitions.h"
#include "InputInterface.h"
#include "DataControl.h"
#include "LEDController.h"
class StateController
{
public:
StateController(CDOS_Info *inputtedInfo);
void routine(void);
private:
CDOS_Info *info; // create copy of CDOS_Info pointer that member functions can access and modify
InputInterface userInput; // Create input interface object
DataControl dataControl; // Create data control object
LEDController lightController; // Controls the LEDs on the CDOS
};
#endif
状态控制器源代码:
#include "Arduino.h"
#include "CDOS_Definitions.h"
#include "StateController.h"
#include "LEDController.h"
#include "InputInterface.h"
#include "DataControl.h"
StateController::StateController(CDOS_Info *inputtedInfo)
{
info = inputtedInfo;
userInput = InputInterface();
dataControl = DataControl(info);
lightController = LEDController();
}
void StateController::routine(void)
{
int static previousTime;
int currentTime = millis();
bool static startTime = false;
int teachTime = 5000;
// State 0 - Start Up State
if(info->currentState == 0)
{
// Transition Case
if(userInput.getDigitalInput())
{
info->currentState = 3;
previousTime = currentTime;
}
// Lighting
lightController.setLightConfig0();
}
// State 1 - Disturbed State
else if(info->currentState == 1)
{
// Transition Case
if(userInput.getDigitalInput())
{
info->currentState = 3;
previousTime = currentTime;
}
// Compute vertical angle
dataControl.calculateVerticalAngle();
// Lighting
lightController.setLightConfig1();
}
// State 2 - Faulted State
else if(info->currentState == 2)
{
// Haven't created any cases where the system can fault yet, will finish later
// Lighting
lightController.setLightConfig2();
}
// State 3 - Teaching State
else if(info->currentState == 3)
{
// Transition Case
if(abs(currentTime - previousTime) > teachTime)
{
info->currentState = 4;
dataControl.teachNewPosition();
}
// Lighting
lightController.setLightConfig3();
}
// State 4 - Taught State
else if(info->currentState == 4)
{
// Transition Case
if(dataControl.checkPosition())
{
info->currentState = 1;
}
// Compute vertical angle
dataControl.calculateVerticalAngle();
// Lighting
lightController.setLightConfig4();
}
}
数据控制标头:
#ifndef DataControl_h
#define DataControl_h
#include "CDOS_Definitions.h"
class DataControl
{
public:
DataControl(CDOS_Info *inputtedInfo);
void teachNewPosition(void);
bool checkPosition(void);
void calculateVerticalAngle(void);
private:
CDOS_Info *info; // create copy of CDOS_Info pointer that member functions can access and modify
};
#endif
数据控制源代码:
#include "Arduino.h"
#include "DataControl.h"
#include "CDOS_Definitions.h"
#include "SensorSerialInterface.h"
DataControl::DataControl(CDOS_Info *inputtedInfo)
{
info = inputtedInfo;
}
如果不调用对象的构造函数,则无法创建对象。因为StateController
也是一个DataControl
,你不能在不调用DataControl
的构造函数(以及StateController
(的情况下创建一个。但是该构造函数接受一个参数,因此编译器无法为您添加调用。
方法是修改派生类的构造函数,如下所示:
StateController::StateController(CDOS_Info *inputtedInfo)
: DataControl(inputtedInfo) // calls DataControl's constructor
{
// info = inputtedInfo; // Don't need this, because DataControl's constructor does it.
userInput = InputInterface();
dataControl = DataControl(info);
lightController = LEDController();
}
注意奇怪的语法 - 这不是一个正常的函数调用。是的,它确实超出了大括号。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- STL向量上出现奇怪的复制构造函数错误
- C++ 乘法定义的构造函数错误消息似乎错误
- 通过构造函数错误地播种梅森扭曲
- C++ 多态构造函数错误;标识符未定义
- 类组合中的构造函数错误
- C++中的构造函数错误
- 构造函数错误:错误:数字常量之前的预期“”,“”或“..”
- 这个奇怪的复制构造函数错误抱怨的是什么
- Singleton子类构造函数错误
- 默认构造函数错误 (C++)
- 基类构造函数错误
- 初始化列表构造函数错误带有CRTP
- C++可能存在写入位置的构造函数错误冲突
- 构造函数错误:需要标识符
- 复制构造函数错误:对象的类型限定符与成员函数不兼容