爲什麼編譯器抱怨鑄造這裏轉換要求reinterpret_cast,C樣式轉換或函數樣式轉換
class DBconnection {
public:
DataSet* query(string qStr) {
ConnImpl* conImpl = ConnectionPool::getInstance()->acquireConnection();
DataSet *data = new DataSet();
conImpl->doQuery(qStr,data);
ConnectionPool::getInstance()->releaseConnection(conImpl);
return data;
}
};
class Client {
public:
DataSet* queryDB(string q) {
return new DBconnection()->query(q);
}
};
客戶:: queryDB(STD :::字符串)實際上是通過返回一個DataSet指針的DbConnection ::查詢(的std :: string)。
錯誤:
錯誤C2440: '迴歸':無法從 '的DbConnection *' 轉換爲 '數據集*' 指向的類型無關;轉換要求reinterpret_cast,C樣式轉換或函數樣式轉換
如果我嘗試例如 - C-鑄造,它不工作,要麼
return new (DataSet*)DBconnection()->query(q);
你的代碼應該工作。這是你的真實代碼嗎?在最後一行中,演員的位置是錯誤的。它必須在'new'之前,否則,這是placement-new語法。但是,不應該有必要施放。如果函數返回一個'DataSet *',那麼你不必將它轉換爲'DataSet *'。 (注意:你的代碼泄漏了它創建的所有對象) – gexicide
@gexicide - 是自從我的計算機科學教授做到這一點後,它才能工作:-)。所以我不明白爲什麼編譯器會抱怨或者他爲什麼錯了?關於最後一行 - 這是我試過的:-) – java
順便說一句,我不知道你編寫的環境,但是在大多數C++環境中用你當前的代碼調用'Client :: queryDB'造成泄漏。你可以通過簡單地刪除'new'關鍵字來解決你的問題中的泄漏和問題。 – KABoissonneault