Re: No match for 'operator<<' in '((HttpRequest*
On Jul 14, 1:24 am, "io_x" <a...@b.c.invalid> wrote:
=========================
=========================
"eric" <cneric12l...@gmail.com> ha scritto nel messaggionews:2a9f24c1-ac6=
2-4d44-b518-e30a9877fc13@f39g2000prb.googlegroups.com...
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 and 4.5.2
you can get its source code fromhttp://examples.oreilly.com/9780596007614=
/
to test by yourself
looking and thanks your help a lot in advance, Eric
=========================
==========================
=======
this here compile and run: i.e. print "xml" in "thisfile"
file in this directory;
this not send nothing in the net, just open and write a file
--------------------
// Example 8-3. Using constructors and destructors
#include <stdio.h>
#include <iostream>
#include <string>
#define u8 unsigned char
#if ULONG_MAX == 0xFFFFFFFF
#define u32 unsigned long
#elif UINT_MAX == 0xFFFFFFFF
#define u32 unsigned int
#elif USHRT_MAX == 0xFFFFFFFF
#define u32 unsigned short
#else
#error "Non posso compilare con questo sistema"
#endif
#define uns unsigned
// macro for function
#define P printf
// macro for keyWords
#define G goto
#define R return
#define W while
#define F for
#define T template
#define TN typename
#define S sizeof
using namespace std;
class Socket{
public:
Socket(string& hostname)
{u8 *a=hostname.c_str();
fsck=fopen(a , "w+b");}
~Socket(){fsck=(FILE*)fclose(fsck);
// better without this assignament but
// here somone has to print a message if fsck==-1
}
u32 send(string& soapMsg)
{size_t k, slen;
slen=soapMsg.length();
F(k=0; k<slen ; ++k)
if( fputc(soapMsg[k], fsck) == EOF ) break;
if(k!=slen) R -1;
R 0;
}
FILE* fsck;
};
u32 sendMyData(string soapMsg, string host) {
Socket req(host);
R req.send(soapMsg);
// Nothing to do here, because when req goes out of scope
// everything is cleaned up.
}
int main(void)
{string s="xml";
sendMyData(s, "thisfile");
R 0;
}
eric@eric-laptop:~/cppcookbook/ch8$ g++ Example8-3-2.cpp
Example8-3-2.cpp:14:2: error: #error "Non posso compilare con questo
sistema"
Example8-3-2.cpp:47:2: error: =91u32' does not name a type
Example8-3-2.cpp: In constructor =91Socket::Socket(std::string&)':
Example8-3-2.cpp:37:24: error: invalid conversion from =91const char*'
to =91unsigned char*'
Example8-3-2.cpp:39:22: error: invalid conversion from =91unsigned
char*' to =91const char*'
Example8-3-2.cpp:39:22: error: initializing argument 1 of =91FILE*
fopen(const char*, const char*)'
Example8-3-2.cpp: At global scope:
Example8-3-2.cpp:61:1: error: =91u32' does not name a type
Example8-3-2.cpp: In function =91int main()':
Example8-3-2.cpp:73:26: error: =91sendMyData' was not declared in this
scope
---------------------------------------------------------------------------=
------------------------------
Thanks Io_x
and your suggestion
above is my compiler 's response of your test program. I will try to
learn more by myself. And at meantime,
I guess it is not difficult for you to refine it if you think it is
necessary so it can fit on my system too.
of course, I always welcome whoever keep original class of book
authors expect, i.e. class HttpRequest
and its overloaded operator << in
void send(string soapMsg) {sock_ << soapMsg;}
to complete the fix
Eric
---------------------------------------------------------------------------=
-------------------------------