[英]tuple of const references: cannot convert from int to const <T> &
我正在嘗試使用VS2010編譯以下代碼:
typedef enum EPinDirection{
EPinDirection_Unknown,
EPinDirection_In,
EPinDirection_Out
};
class cPin{
std::tuple<QString,EPinDirection> m_nameDir;
public:
cPin(){ m_nameDir = std::tuple<QString, EPinDirection>("noNamePin", EPinDirection_Unknown);}
cPin(QString name, EPinDirection dir) { m_nameDir = std::tuple<QString, EPinDirection>(name, dir); }
const std::tuple<QString,EPinDirection>& getNameDir() const {return m_nameDir;};
};
class cConnection{
std::tuple<const cPin&,const cPin&> m_data;
public :
cConnection();
cConnection(const cPin& start, const cPin& stop) {m_data = std::tuple<const cPin&, const cPin&>(start, stop);}
int setData(const cPin& start, const cPin& stop) {m_data = std::tuple<const cPin&, const cPin&>(start, stop);}
const std::tuple<const cPin&,const cPin&> & getData() const {return m_data;}
};
編譯失敗並顯示消息:無法從'int'轉換為'const cPin&'。 指示的行號位於cConnection中元組的聲明中。
我不知道為什么。 可能是什么原因?
編譯錯誤是由於編譯器嘗試使用默認值初始化cConnection::m_data
。 由於元組需要兩個const引用,因此它無法執行此操作,因此會產生錯誤。
您可以通過刪除cConnection
的默認構造函數並更改其余的構造函數以使用初始化程序來解決此問題:
class cConnection {
std::tuple<const cPin&, const cPin&> m_data;
public:
cConnection(const cPin& start, const cPin& stop)
: m_data(std::tuple<const cPin&, const cPin&>(start, stop)) {
}
}
(您也可以通過將元組更改為具有指針而不是引用來解決此問題,但這在程序上下文中可能沒有意義。)
如果您想進一步簡化代碼,請考慮使用std::make_tuple
(可以推斷類型的差額),而不是使用tuple
構造函數:
class cConnection {
std::tuple<const cPin&, const cPin&> m_data;
public:
cConnection(const cPin& start, const cPin& stop)
: m_data(std::make_tuple(start, stop)) {
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.