Ich möchte einen Konstruktor erstellen, der zwei Argumente benötigt, und ihn dann verwenden, um einige Instanzen zu erstellen, aber ich erhalte Fehler wie diesen.Ich kann keine Constructor-Methode/einen Prototyp haben, der mehrere ganze Zahlen als Argumente akzeptiert? Arduino?
*"Too_Many_Moles:8: error: conversion from 'mole*' to non-scalar type 'mole' requested
mole mole6 = new mole(7, 13);
^
exit status 1
conversion from 'mole*' to non-scalar type 'mole' requested"*
was ich useing
- Arduino/Genuino Uno Chip mega328u
- Arduino IDE V1.6.12
- dies sollte keine Rolle spielen, weil ich brauche es nur zu überprüfen
main.ino Datei
#include <mole.h>
mole mole1 = new mole(2, 8 );
mole mole2 = new mole(3, 9 );
mole mole3 = new mole(4, 10);
mole mole4 = new mole(5, 11);
mole mole5 = new mole(6, 12);
mole mole6 = new mole(7, 13);
//I whould also like a array of moles here so I can do something like this.
//moleArray[0].sould_be_up = true;
void setup() {
// put your setup code here, to run once:
}
void loop() {
// put your main code here, to run repeatedly:
}
mole.h Datei
#ifndef mole_h
#define mole_h
#include "Arduino.h"
class mole
{
public:
mole(int p_out, int p_in);
void changeMoleSate();
void resetMole();
void setUpTimer(int up_timer);
int getUpTimer();
//I think I will move these to that main class
//************************
void decrementUpTimer();
//************************
void setRecoveryTimer(int recovery_timer);
int getRecoveryTimer();
//************************
void decrementRecoveryTimer();
//************************
boolean sould_be_up = false;
private:
int _up_timer = 0;
int _recovery_timer = 0;
int _pin_out;
int _pin_in;
// todo
//void setPinsModes();
};
#endif
mole.cpp Datei
#include "Arduino.h"
#include "mole.h"
mole::mole(int p_out, int p_in) {
this._pin_out = p_out;
this._pin_in = p_in;
}
// todo
/*void mole::setPinsModes() {
pinMode(_pino , OUTPUT);
pinMode(_pini , INPUT);
}*/
void mole::changeMoleSate() {
if (sould_be_up == false) {
digitalWrite(_pino, LOW);
}
else {
digitalWrite(_pini, HIGH);
}
}
void mole::resetMole() {
sould_be_up = false;
_up_timer = 0;
_recovery_timer = 0;
digitalWrite(_pino, LOW);
}
void mole::setUpTimer(int up_timer) {
_up_timer = up_timer;
}
int mole::getUpTimer() {
return _up_timer;
}
void mole::decrementUpTimer() {
if (_up_timer > 0) {
_up_timer--;
}
}
void mole::setRecoveryTimer(int recovery_timer) {
_recovery_timer += recovery_timer;
}
int mole::getRecoveryTimer() {
return _recovery_timer;
}
void mole::decrementRecoveryTimer() {
if (_recovery_timer > 0) {
_recovery_timer--;
}
}
Gibt es einen Grund für den 'c'-Tag oder tun Sie genau wie der Brief? – EOF
https://www.arduino.cc/en/Main/FAQ "Die Arduino-Software ist auch Open-Source. Der Quellcode für die Java-Umgebung ist unter der GPL veröffentlicht und die C/C++ - Mikrocontroller-Bibliotheken sind unter der LGPL. " also weiß ich nicht –
Dies scheint ein bisschen ein "false friends" -Fall zu sein, vorausgesetzt, Sie sind vertraut mit Java und lernen nur C++. In Java sind nicht-primitive Variablen tatsächlich Referenzen (ähnlich wie C/C++ - Zeiger) auf Objekte auf dem Heap; In C++ ist eine Variable nur ein Zeiger, wenn Sie sie explizit als einen deklarieren. Also, "mol mol1" in Java ist tatsächlich äquivalent zu "mol * mol1" in C++. Sie können die Objekte entweder direkt erstellen, ohne "neu" (siehe Pete Beckers Antwort, unten), oder ändern Sie "mol mol1 = new mol (2, 8)" und ähnliche Linien zu "mol * mol1 = new mol (2, 8); '(mit einem Sternchen). –