No match for 'operator<<' in '((HttpRequest*

Asked by Edward Benson on 2011-07-14

Dear advanced c/g++ programers:

  I have a simple program from book C++ cookbook, page 291, 8.3, Using
Constructors and Destructors to manage
resources (or RAII), but it can not get compiled in my g++
------------------------------------------------------------------------------------------------
// Example 8-3. Using constructors and destructors
#include <iostream>
#include <string>
using namespace std;
class Socket {
public:
   Socket(const string& hostname) {}
};
class HttpRequest {
public:
  HttpRequest (const string& hostname) :
     sock_(new Socket(hostname)) {}
  void send(string soapMsg) {sock_ << soapMsg; }
  ~HttpRequest () {delete sock_;}
private:
   Socket* sock_;
};
void sendMyData(string soapMsg, string host) {
   HttpRequest req(host);
   req.send(soapMsg);
   // Nothing to do here, because when req goes out of scope
   // everything is cleaned up.
}
int main() {
   string s = "xml";
   sendMyData(s, "www.oreilly.com");
}
------------------------------------------------------------------------------------------------------------------------
my test compile fail as
----------------------------------
eric@eric-laptop:~/cppcookbook/ch8$ g++ Example8-3.cpp
Example8-3.cpp: In member function ‘void
HttpRequest::send(std::string)’:
Example8-3.cpp:13:39: error: no match for ‘operator<<’ in
‘((HttpRequest*)this)->HttpRequest::sock_ << soapMsg’
-------------------------------------------------------------
on both g++ 4.3.4(cygwin on windown xp) and 4.5.2(ubuntu10.04)
you can get its source code from
http://examples.oreilly.com/9780596007614/
to test by yourself

looking and thanks your help a lot in advance, Eric

Question information

Language:
English Edit question
Status:
Answered
For:
Ubuntu gcc-defaults Edit question
Assignee:
No assignee Edit question
Last query:
2011-07-14
Last reply:
2011-07-14
mycae (mycae) said : #1

The code is incorrect.

You have not defined a streaming operator for your socket class -- the program doesn't know what you mean by "<<" with regards to Socket. Perhaps the book is asking you to extend the code -- there is no network access function calls in that example whatsoever, so the code will not actually perform any kind of HTTP request.

you need to interact with the OS, or a library that uses the OS functions -- networking is not part of C++ (but it will be for C++0x TR2 i believe, but this is in the future)

Can you help with this problem?

Provide an answer of your own, or ask Edward Benson for more information if necessary.

To post a message you must log in.