2016-04-23 23 views
-3

我使用這個庫:https://github.com/Agamnentzar/bluetooth-serial-port的unique_ptr <>導致compliation誤差在C++

BTSerialPortBinding::Create(address, channelID) 

    Returns new instance of BTSerialPortBinding object 

    address: string containint bluetooth address of the device 
    channelID: ID of the serial port channel 

我有一個語句:

unique_ptr<BTSerialPortBinding>bt(BTSerialPortBinding::Create(d1.address, 1));

當我分離與ArduinoDevice聲明的聲明。 h和ArduinoDevice.cpp在構造函數中初始化如下:

std::unique_ptr<BTSerialPortBinding> bt; 
bt.reset(BTSerialPortBinding::Create("93:83:, 1)); 

當我將這些語句,我得到了以下錯誤:

ArduinoDevice &ArduinoDevice::operator =(const ArduinoDevice &)': attempting to reference a deleted function 

這是由錯誤

dev = ArduinoDevice("/dev/tty.IP-DevB"); 

Process.h

#ifndef __PROCESS_H 
#define __PROCESS_H 

#define _USE_MATH_DEFINES 
#include "ResonantLowpassFilter.h" 

#include "ArduinoDevice.h" 

//============================================================================== 
/** 
*/ 
class AudioProcessor : public AudioProcessor 
{ 
public: 
    //============================================================================== 
    WahwahAudioProcessor(); 
    ~WahwahAudioProcessor(); 

    void prepareToPlay (double sampleRate, int samplesPerBlock); 
    void releaseResources(); 

    void processBlock (AudioSampleBuffer& buffer, MidiBuffer& midiMessages); 

    AudioProcessorEditor* createEditor(); 
    int getNumParameters(); 
    int getNumPrograms(); 
    int getCurrentProgram(); 
    void setCurrentProgram (int index); 
    const String getProgramName (int index); 
    void changeProgramName (int index, const String& newName); 



    float centreFrequency_, q_; 
    void updateFilterArduino(); 

    ArduinoDevice dev; //instance to an Arduino device from which sensor data is read 

}; 

#endif // _PROCESS 

引用的Process.cpp文件的相關位ArduinoDevice.h

#ifndef ArduinoDevice_h 
#define ArduinoDevice_h 

#include <stdio.h> 
#include "BTSerialPortBinding.h" 
#include <memory> 

class ArduinoDevice 
{ 
public: 
    ArduinoDevice(const char *dev=""); 

    void connect(); 

    void start(void); 
    void stop(void); 
    void read(void); 

    /** 
    Disconnects from Arduino device 
    **/ 
    ~ArduinoDevice(); 

private: 
    const char *device; //port address of the device (e.g. "/dev/tty.FireFly-E552-SPP") 

    std::unique_ptr<BTSerialPortBinding> bt; //bt serial port 

    void close(void); 

}; 

#endif 

編輯:

我使用Windows 10,Visual Studio 2015和Microsoft的C++編譯器。我也使用額外的JUCE庫(https://www.juce.com/)。

dev = ArduinoDevice("/dev/tty.IP-DevB"));

dev在高於其ArduinoDevice

的一個實例Process.h文件我的構造看起來像這樣宣稱:

ArduinoDevice::ArduinoDevice(const char *dev) 
{ 
    device = dev; 
    bt.reset(BTSerialPortBinding::Create("98:D3:31:FD:11:1A", 1)); 
} 

在ArduinoDevice現在我已經嘗試過這一點。 cpp和聲明.h但我仍然得到與上面相同的錯誤:

ArduinoDevice&&(const char *dev); 
{ 
    data = dev.data; 
    dev.data = nullptr; 
} 
+0

在行'dev = ArduinoDevice(「/ dev/tty.IP-DevB」); ','dev'是什麼? (顯示其聲明) –

+0

''dev'也在'bt.reset(BTSerialPortBinding :: Create(dev,1));'中提到。我猜你使用同一個名稱'dev'來處理兩個不同的事情,這是令人困惑的 –

+0

同時顯示你使用的編譯器和命令行 –

回答

0

unique_ptr不可複製。所以當你將它聲明爲你班級的成員時,你的班級也變得不可複製。這個錯誤恰恰指出了這一點。 (複製分配操作符因此被刪除)。

請注意,移動賦值運算符通常由編譯器自動爲您生成。但在你的情況下,因爲你已經爲你的類明確定義了一個析構函數,所以編譯器不能爲你安全地定義一個移動賦值運算符(或構造函數)。

+0

'dev = ArduinoDevice(「/ dev/tty.IP-DevB」);'是一個移動操作,所以它不應該調用複製分配。OP正在拋棄一些重要的東西。 –

+0

@ M.M由於類具有明確定義的析構函數,因此編譯器不會生成移動賦值運算符。因此錯誤。 – Mohammad

+0

我能做些什麼來引用ArduinoDevice對象? – Als

相關問題