既存のライブラリ (「Webduino」、Arduino の Web サーバー) を別の既存のライブラリ (「WiFly」、wifi モジュール) で動作するように調整し、問題が発生しています。各ライブラリは単独で正常に動作します。Webduino ライブラリは、SPI 経由でイーサネット ハードウェア モジュールを使用することを想定していますが、WiFi モジュールはシリアル ポート (UART) を使用します。私が得るエラーは次のとおりです。
WiFlyClient.h: In member function 'WiFlyClient& WiFlyClient::operator=(const WiFlyClient&)':
WiFlyClient.h:14:
error: non-static reference member 'WiFlyDevice& WiFlyClient::_WiFly', can't use default assignment operator
WiFlyWebServer.h: In member function 'void WebServer::processConnection(char*, int*)':
WiFlyWebServer.h:492: note: synthesized method 'WiFlyClient& WiFlyClient::operator=(const WiFlyClient&)' first required here
関連するコード スニペットを次に示します。これまでのところ、WiFlyWebServer.h (Webduino) のみを変更していることに注意してください。
// WiFlyWebServer.h (Webduino)
...
WiFlyServer m_server; // formerly EthernetServer and
WiFlyClient m_client; // EthernetClient
...
void WebServer::processConnection(char *buff, int *bufflen){
...
// line 492
m_client = m_server.available();
...
}
// WiFlyClient.h
class WiFlyClient : public Client {
public:
WiFlyClient();
...
private:
WiFlyDevice& _WiFly;
...
}
// WiFlyClient.cpp
#include "WiFly.h"
#include "WiFlyClient.h"
WiFlyClient::WiFlyClient() :
_WiFly (WiFly) { // sets _wiFly to WiFly, which is an extern for WiFlyDevice (WiFly.h)
...
}
// WiFly.h
#include "WiFlyDevice.h"
...
extern WiFlyDevice WiFly;
...
// WiFlyDevice.h
class WiFlyDevice {
public:
WiFlyDevice(SpiUartDevice& theUart);
...
// WiFlyDevice.cpp
WiFlyDevice::WiFlyDevice(SpiUartDevice& theUart) : SPIuart (theUart) {
/*
Note: Supplied UART should/need not have been initialised first.
*/
...
}
問題はm_client = m_server.available();
、問題が解決したことをコメントした場合に発生します(ただし、すべてがその行に依存しています)。実際の問題は、WiFiClientオブジェクトが割り当てられているときに_WiFlyメンバーが初期化(上書き?)できないことのようですが、変更なしで動作するのに、なぜここで動作しないのか理解できません。
(はい、ヘッダーファイルに実装があることは知っています。なぜ彼らがそのように書いたのかわかりません。私を責めないでください!)
洞察はありますか?