java
java

Reputation: 1165

Conversion requires reinterpret_cast, C-style cast or function-style cast

Why do the compiler complain about casting here

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

The Client::queryDB(std:::string) is actually returning a DataSet pointer through DBconnection::query(std::string).

The error:

error C2440: 'return' : cannot convert from 'DBconnection *' to 'DataSet *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

If I try for instance - c-casting, it doesnt work either

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

Upvotes: 2

Views: 10829

Answers (1)

Bathsheba
Bathsheba

Reputation: 234695

You've forgotten your operator precedence table:

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

will work. new has a lower precedence than ->.

Upvotes: 4

Related Questions