转换需要reinterpret_cast,C风格的转换或函数式转换

时间:2015-07-21 12:09:58

标签: c++ casting static-cast

为什么编译器会抱怨在这里投射

 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);
  }
 };

Client :: queryDB(std ::: string)实际上是通过DBconnection :: query(std :: string)返回一个DataSet指针。

错误:

错误C2440:'返回' :无法转换为' DBconnection *'到' DataSet *'     指向的类型是无关的;转换需要reinterpret_cast,C风格的转换或函数式转换

如果我尝试使用例如c-casting,它也不起作用

 return new (DataSet*)DBconnection()->query(q);

1 个答案:

答案 0 :(得分:4)

您已经忘记了运营商优先级表:

return (new DBconnection())->query(q);

会奏效。 new的优先级低于->