2016-11-12 2 views
0

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--; 
    } 
} 
+1

Gibt es einen Grund für den 'c'-Tag oder tun Sie genau wie der Brief? – EOF

+0

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 –

+0

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). –

Antwort

0
mole mole1 = new mole(2, 8 ); 

Das versucht, ein mole Objekt auf dem freien Speicher zu erstellen und den Zeiger auf dem Objekt in mole1 zu speichern. Das wird nicht funktionieren. Erstellen Sie einfach das mole1 Objekt direkt:

mole mole1(2, 8 ); 
Verwandte Themen