2016-11-12 7 views
0

2つの引数を必要とするコンストラクタを作成してインスタンスを作成するが、このようなエラーが発生する。私はちょうどそれがを確認する必要があるため、これは問題ではないはず私は引数として複数の整数をとるコンストラクタメソッド/プロトタイプを使用できませんか? Arduino?

  • Arduinoの/ Genuinoの宇野チップmega328uをuseingい
  • のArduino IDEのV1.6.12
  • *"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"* 
    

main.inoファイル

#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ファイル

#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ファイル

#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

「c」タグの理由はありますか、それとも手紙が好きですか? – EOF

+0

https://www.arduino.cc/en/Main/FAQ "Arduinoソフトウェアもオープンソースです。Java環境のソースコードはGPLで、C/C++マイクロコントローラライブラリはLGPLの下にあります。 "だから私は知らない –

+0

これは、あなたがJavaをよく知っていて、C++だけを学んでいると仮定すると、「偽りの友人」のようなものです。 Javaでは、非プリミティブ変数は実際にヒープ上のオブジェクトへの参照(C/C++ポインタに似ています)です。 C++では、変数を明示的に宣言すると、変数はポインタに過ぎません。だから、Javaの 'mole mole1'はC++の' mole * mole1'に相当します。あなたは 'new'を使わずに直接オブジェクトを作成することができます(以下のPete Beckerの答えを参照)、' mole mole1 = new mole(2,8); 'と同様の行を' mole * mole1 = new mole(2、 8); '(アスタリスク付き)。 –

答えて

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

フリーストアにmoleオブジェクトを作成し、そのオブジェクトへのポインタをmole1に保存しようとします。それは動作しません。 mole1オブジェクトを直接作成してください:

mole mole1(2, 8 ); 
関連する問題