最簡單的方式爲我解釋這是什麼我試圖在即時通訊比較熟悉,C#語言做了一個例子:通行證現有對象構造函數或構建一個新的
public class ServerLib {
private SoftwareSerial _bt;
private string _name, _game;
public ServerLib(int rx, int tx, string name, string game) {
_bt = new SoftwareSerial(rx, tx);
_bt.begin(9600);
_name = name;
_game = game;
}
public ServerLib(ref SoftwareSerial bt, string name, string game) {
_bt = bt;
_name = name;
_game = game;
}
}
我試圖做到這一點的一個Arduino庫(所以我認爲C++),並嘗試以下操作:
class ServerLib {
public:
ServerLib(int rx, int tx, String name, String game);
ServerLib(SoftwareSerial serial, String name, String game);
private:
SoftwareSerial _bt;
String _name;
String _game;
};
ServerLib::ServerLib(int rx, int tx, String name, String game) : _bt(rx, tx) {
_name = name;
_game = game;
_bt.begin(9600);
}
ServerLib::ServerLib(SoftwareSerial serial, String name, String game) : _bt(serial) {
_name = name;
_game = game;
}
這將編譯,但只有第一個構造函數的作品,如果我用第二個所有企圖使用SoftwareSerial似乎什麼都不做。 如果我註釋掉第一個構造函數和更換,第二個與
ServerLib::ServerLib(SoftwareSerial& serial, String name, String game) : _bt(serial) {}
而且字段更改爲SoftwareSerial& _bt
那麼這個構造函數將正常工作,但我不能設法得到它與兩個構造編譯。如果我把它看作是我的錯誤:
error: invalid initialization of reference of type 'SoftwareSerial&' from expression of type 'int'
改變第一構造函數
ServerLib::ServerLib(int rx, int tx, String name, String game) : _bt(SoftwareSerial(rx, tx)) {}
錯誤與
error: invalid initialization of non-const reference of type 'SoftwareSerial&' from an rvalue of type 'SoftwareSerial'
我想的最後一件事是移動初始化內第一個構造如下:
ServerLib::ServerLib(int rx, int tx, String name, String game) {
_bt = SoftwareSerial(rx, tx);
_bt.begin(9600);
}
但是這會導致
error: uninitialized reference member 'ServerLib::_bt' [-fpermissive]
您遇到的錯誤與您上傳的代碼不符。你怎麼調用構造函數? – g24l 2015-04-01 10:03:49
爲什麼'_bt'是你真實代碼中的一個參考? C++中的「引用」與C#中的「引用」是完全不同的。他們只是碰巧用同一個詞命名。 – molbdnilo 2015-04-01 10:23:00
我發佈的錯誤是在這些行上,我將構造函數稱爲「ServerLib服務器(10,11,」name「,」game「);'或'ServerLib服務器(bt,」name「,」遊戲「) ;''SoftwareSerial bt(10,11);' – Goz3rr 2015-04-01 10:24:39