f



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

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 =3D "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 =91void
HttpRequest::send(std::string)=92:
Example8-3.cpp:13:39: error: no match for =91operator<<=92 in
=91((HttpRequest*)this)->HttpRequest::sock_ << soapMsg=92
-------------------------------------------------------------
on both g++ 4.3.4 and 4.5.2
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

0
7/14/2011 12:55:20 AM
comp.lang.c++ 49423 articles. 7 followers. Post Follow

10 Replies
557 Views

Similar Articles

[PageSpeed] 25

On 07/14/11 12:55 PM, eric wrote:
> 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�
> -------------------------------------------------------------

You don't have an operator<<( Socket*, const std::string& ) declared 
anywhere.

-- 
Ian Collins
0
ian-news (10155)
7/14/2011 2:08:42 AM
On Jul 13, 7:08=A0pm, Ian Collins <ian-n...@hotmail.com> wrote:
> On 07/14/11 12:55 PM, eric wrote:
>
>
>
> > Dear advanced c/g++ programers:
>
> > =A0 =A0I have a simple program from book C++ cookbook, page 291, 8.3, U=
sing
> > Constructors and Destructors to manage
> > resources (or RAII), but it can not get compiled in my g++
> > -----------------------------------------------------------------------=
-------------------------
> > // Example 8-3. =A0Using constructors and destructors
> > #include<iostream>
> > #include<string>
> > using namespace std;
> > class Socket {
> > public:
> > =A0 =A0 Socket(const string& =A0hostname) {}
> > };
> > class HttpRequest {
> > public:
> > =A0 =A0HttpRequest (const string& =A0hostname) :
> > =A0 =A0 =A0 sock_(new Socket(hostname)) {}
> > =A0 =A0void send(string soapMsg) {sock_<< =A0soapMsg; }
> > =A0 =A0~HttpRequest () {delete sock_;}
> > private:
> > =A0 =A0 Socket* sock_;
> > };
> > void sendMyData(string soapMsg, string host) {
> > =A0 =A0 HttpRequest req(host);
> > =A0 =A0 req.send(soapMsg);
> > =A0 =A0 // Nothing to do here, because when req goes out of scope
> > =A0 =A0 // everything is cleaned up.
> > }
> > int main() {
> > =A0 =A0 string s =3D "xml";
> > =A0 =A0 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 =91void
> > HttpRequest::send(std::string)=92:
> > Example8-3.cpp:13:39: error: no match for =91operator<<=92 in
> > =91((HttpRequest*)this)->HttpRequest::sock_<< =A0soapMsg=92
> > -------------------------------------------------------------
>
> You don't have an operator<<( Socket*, const std::string& ) declared
> anywhere.
>
> --
> Ian Collins

I add
// ostream & operator<<(const std::string&) {}
in class Socket
(and : public Socket     at class HttpRequest)
or

//  ostream & operator<<( Socket*, const std::string& ) {}
in class HttpRequest

neither compile success
/* that book is claim tested good on visual c++ 7.1 in window xp,
would anyone try and post your result? */
so
please help again
and thanks a lot in advance, Eric

0
7/14/2011 2:42:36 AM
On 07/14/11 02:42 PM, eric wrote:
> On Jul 13, 7:08 pm, Ian Collins<ian-n...@hotmail.com>  wrote:
>>
>> You don't have an operator<<( Socket*, const std::string&  ) declared
>> anywhere.
>
> I add
> // ostream&  operator<<(const std::string&) {}
> in class Socket
> (and : public Socket     at class HttpRequest)
> or
>
> //  ostream&  operator<<( Socket*, const std::string&  ) {}
> in class HttpRequest
>
> neither compile success
> /* that book is claim tested good on visual c++ 7.1 in window xp,
> would anyone try and post your result? */
> so
> please help again
> and thanks a lot in advance, Eric

Post your code and errors.

-- 
Ian Collins
0
ian-news (10155)
7/14/2011 4:58:22 AM
>
> Post your code and errors.
>
> --
> Ian Collins

--------------------------------------------------------------------
If I tried your fist suggestion
---------------------------------
// Example 8-3.  Using constructors and destructors
#include <iostream>
#include <string>
using namespace std;
class Socket {
public:
   Socket(const string& hostname) {}

   // ostream & operator<<(const std::string&) {}
};
class HttpRequest : public Socket {
public:
  HttpRequest (const string& hostname) :
     sock_(new Socket(hostname)) {}

  ostream & operator<<( Socket*, const std::string& ) {}

  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 =3D "xml";
   sendMyData(s, "www.oreilly.com");
}
---------------------------------------------------------------------------=
----
compile result is
------------------
eric@eric-laptop:~/cppcookbook/ch8$ g++ Example8-3.cpp
Example8-3.cpp:16:53: error: =91std::ostream&
HttpRequest::operator<<(Socket*, const std::string&)=92 must take
exactly one argument
Example8-3.cpp: In constructor =91HttpRequest::HttpRequest(const
std::string&)=92:
Example8-3.cpp:14:32: error: no matching function for call to
=91Socket::Socket()=92
Example8-3.cpp:7:4: note: candidates are: Socket::Socket(const
std::string&)
Example8-3.cpp:5:14: note:                 Socket::Socket(const
Socket&)
Example8-3.cpp: In member function =91void
HttpRequest::send(std::string)=92:
Example8-3.cpp:18:39: error: no match for =91operator<<=92 in
=91((HttpRequest*)this)->HttpRequest::sock_ << soapMsg=92


---------------------------------------------------------------------------=
---------------------------------------
If I tried my other design, put opearator << in class Socket
---------------------------------------------------
// Example 8-3.  Using constructors and destructors
#include <iostream>
#include <string>
using namespace std;
class Socket {
public:
   Socket(const string& hostname) {}

    ostream & operator<<(const std::string&) {}
};
class HttpRequest:  public Socket   {
public:
  HttpRequest (const string& hostname) :
     sock_(new Socket(hostname)) {}

 // ostream & operator<<( Socket*, const std::string& ) {}

  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 =3D "xml";
   sendMyData(s, "www.oreilly.com");
}
---------------------------------------------------------------------------=
----------------------
I get the following compiler error
----------------------------------
eric@eric-laptop:~/cppcookbook/ch8$ g++ Example8-3.cpp
Example8-3.cpp: In constructor =91HttpRequest::HttpRequest(const
std::string&)=92:
Example8-3.cpp:14:32: error: no matching function for call to
=91Socket::Socket()=92
Example8-3.cpp:7:4: note: candidates are: Socket::Socket(const
std::string&)
Example8-3.cpp:5:14: note:                 Socket::Socket(const
Socket&)
Example8-3.cpp: In member function =91void
HttpRequest::send(std::string)=92:
Example8-3.cpp:18:39: error: no match for =91operator<<=92 in
=91((HttpRequest*)this)->HttpRequest::sock_ << soapMsg=92
---------------------------------------------------------------------------=
--------------------------------------
hope that help any advanced c/g++ program to debug my(actually
author's) program
Thanks a lot in advance
Eric
0
7/14/2011 5:17:26 AM
On 07/14/11 05:17 PM, eric wrote:
>
> ------------------------------------------------------------------------------------------------------------------
> If I tried my other design, put opearator<<  in class Socket
> ---------------------------------------------------
> // Example 8-3.  Using constructors and destructors
> #include<iostream>
> #include<string>
> using namespace std;
> class Socket {
> public:
>     Socket(const string&  hostname) {}
>
>      ostream&  operator<<(const std::string&) {}
> };

> class HttpRequest:  public Socket   {

Why is HttpRequest derived from Socket?

> public:
>    HttpRequest (const string&  hostname) :
>       sock_(new Socket(hostname)) {}
>
>   // ostream&  operator<<( Socket*, const std::string&  ) {}

This can't be a class member, declare it outside of the class and look 
at the return type (hint: where do you get an ostream to return?).

> hope that help any advanced c/g++ program to debug my(actually
> author's) program

The original code is pretty smelly (and wouldn't compile), but you've 
made it worse!

-- 
Ian Collins
0
ian-news (10155)
7/14/2011 5:55:57 AM
On Jul 13, 10:55=A0pm, Ian Collins <ian-n...@hotmail.com> wrote:
> On 07/14/11 05:17 PM, eric wrote:
>
>
>
> > -----------------------------------------------------------------------=
-------------------------------------------
> > If I tried my other design, put opearator<< =A0in class Socket
> > ---------------------------------------------------
> > // Example 8-3. =A0Using constructors and destructors
> > #include<iostream>
> > #include<string>
> > using namespace std;
> > class Socket {
> > public:
> > =A0 =A0 Socket(const string& =A0hostname) {}
>
> > =A0 =A0 =A0ostream& =A0operator<<(const std::string&) {}
> > };
> > class HttpRequest: =A0public Socket =A0 {
>
> Why is HttpRequest derived from Socket?
>
> > public:
> > =A0 =A0HttpRequest (const string& =A0hostname) :
> > =A0 =A0 =A0 sock_(new Socket(hostname)) {}
>
> > =A0 // ostream& =A0operator<<( Socket*, const std::string& =A0) {}
>
> This can't be a class member, declare it outside of the class and look
> at the return type (hint: where do you get an ostream to return?).
>
> > hope that help any advanced c/g++ program to debug my(actually
> > author's) program
>
> The original code is pretty smelly (and wouldn't compile), but you've
> made it worse!
>
> --
> Ian Collins
---------------------------------------------------------------------------=
---

why I tried to use : public Socket ?
because I guess , <<   operator used in
void send(string soapMsg) {sock_ << soapMsg; }
in class HttpRequest
used declaration in class Socket

Need any advanced c/g++ programers suggestion/help and thanks a lot in
advance, Eric

Eric
0
7/14/2011 6:06:58 AM
=================================================
"eric" <cneric12lin0@gmail.com> ha scritto nel messaggio
news:2a9f24c1-ac62-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 from
http://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;
}







0
io_x
7/14/2011 8:24:46 AM
On 07/14/11 08:24 PM, io_x wrote:

> #define  uns  unsigned
>
> // macro for function
> #define  P  printf

NO!

-- 
Ian Collins
0
ian-news (10155)
7/14/2011 8:37:34 AM
On Jul 14, 1:24=A0am, "io_x" <a...@b.c.invalid> wrote:
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> "eric" <cneric12l...@gmail.com> ha scritto nel messaggionews:2a9f24c1-ac6=
2-4d44-b518-e30a9877fc13@f39g2000prb.googlegroups.com...
> Dear advanced c/g++ programers:
> =A0 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. =A0Using constructors and destructors
> #include <iostream>
> #include <string>
> using namespace std;
> class Socket {
> public:
> =A0 =A0Socket(const string& hostname) {}};
>
> class HttpRequest {
> public:
> =A0 HttpRequest (const string& hostname) :
> =A0 =A0 =A0sock_(new Socket(hostname)) {}
> =A0 void send(string soapMsg) {sock_ << soapMsg; }
> =A0 ~HttpRequest () {delete sock_;}
> private:
> =A0 =A0Socket* sock_;};
>
> void sendMyData(string soapMsg, string host) {
> =A0 =A0HttpRequest req(host);
> =A0 =A0req.send(soapMsg);
> =A0 =A0// Nothing to do here, because when req goes out of scope
> =A0 =A0// everything is cleaned up.}
>
> int main() {
> =A0 =A0string s =3D "xml";
> =A0 =A0sendMyData(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
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D
>
> 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. =A0Using constructors and destructors
> #include <stdio.h>
> #include <iostream>
> #include <string>
> #define =A0u8 =A0unsigned char
>
> #if =A0 ULONG_MAX =3D=3D 0xFFFFFFFF
> #define =A0u32 unsigned long
> #elif UINT_MAX =A0=3D=3D 0xFFFFFFFF
> #define =A0u32 unsigned int
> #elif USHRT_MAX =3D=3D 0xFFFFFFFF
> #define =A0u32 unsigned short
> #else
> #error =A0"Non posso compilare con questo sistema"
> #endif
>
> #define =A0uns =A0unsigned
>
> // macro for function
> #define =A0P =A0printf
>
> // macro for keyWords
> #define G =A0goto
> #define R =A0return
> #define W =A0while
> #define F =A0for
> #define T =A0template
> #define TN typename
> #define S =A0sizeof
>
> using namespace std;
>
> class Socket{
> public:
>
> Socket(string& hostname)
> {u8 =A0*a=3Dhostname.c_str();
>
> =A0fsck=3Dfopen(a , "w+b");}
>
> ~Socket(){fsck=3D(FILE*)fclose(fsck);
> // better without this assignament but
> // here somone has to print a message if fsck=3D=3D-1
>
> }
>
> =A0u32 send(string& soapMsg)
> =A0{size_t =A0k, slen;
>
> =A0 slen=3DsoapMsg.length();
> =A0 F(k=3D0; k<slen ; ++k)
> =A0 =A0 =A0 if( fputc(soapMsg[k], fsck) =3D=3D EOF ) =A0break;
> =A0 if(k!=3Dslen) =A0R =A0-1;
> =A0 R =A00;
> =A0}
>
> =A0FILE* =A0fsck;
>
> };
>
> u32 sendMyData(string soapMsg, string host) {
> =A0 =A0Socket =A0req(host);
>
> =A0 =A0R =A0req.send(soapMsg);
>
> =A0 =A0// Nothing to do here, because when req goes out of scope
> =A0 =A0// everything is cleaned up.
>
> }
>
> int main(void)
> {string =A0s=3D"xml";
> =A0sendMyData(s, "thisfile");
>
> =A0R =A00;
>
> }
>
>

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=92 does not name a type
Example8-3-2.cpp: In constructor =91Socket::Socket(std::string&)=92:
Example8-3-2.cpp:37:24: error: invalid conversion from =91const char*=92
to =91unsigned char*=92
Example8-3-2.cpp:39:22: error: invalid conversion from =91unsigned
char*=92 to =91const char*=92
Example8-3-2.cpp:39:22: error:   initializing argument 1 of =91FILE*
fopen(const char*, const char*)=92
Example8-3-2.cpp: At global scope:
Example8-3-2.cpp:61:1: error: =91u32=92 does not name a type
Example8-3-2.cpp: In function =91int main()=92:
Example8-3-2.cpp:73:26: error: =91sendMyData=92 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
---------------------------------------------------------------------------=
-------------------------------
0
7/14/2011 11:37:02 AM
"eric" <cneric12lin0@gmail.com> ha scritto nel messaggio
news:a7286acf-941d-4c4c-a8ba-0103b63cd3a2@t38g2000prj.googlegroups.com...
On Jul 14, 1:24 am, "io_x" <a...@b.c.invalid> wrote:
> =================================================
>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: �u32� does not name a type
>Example8-3-2.cpp: In constructor �Socket::Socket(std::string&)�:
>Example8-3-2.cpp:37:24: error: invalid conversion from �const char*�
>to �unsigned char*�
>Example8-3-2.cpp:39:22: error: invalid conversion from �unsigned
>char*� to �const char*�
>Example8-3-2.cpp:39:22: error:   initializing argument 1 of �FILE*
>fopen(const char*, const char*)�
>Example8-3-2.cpp: At global scope:
>Example8-3-2.cpp:61:1: error: �u32� does not name a type
>Example8-3-2.cpp: In function �int main()�:
>Example8-3-2.cpp:73:26: error: �sendMyData� 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.

i forget one header... i'm not too much expert...
than i not use the C++ file way, but the C one
than i use macro all want i not to write i.e. P, G etc etc

desclaimer: it could be wrong;
here  it just open a file of name "thisfile" and write in it just "xml"
there it could make burn your little pc
could be less danger if execute in a debugger one step at time

// Example 8-3.  Using constructors and destructors
#include <stdio.h>
#include <limits.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
#define  u32 unsigned long
#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=(u8*)hostname.c_str();

 name="NOfile";
 fsck  = fopen( (const char*)a , "w+b" );
 if(fsck!=0)
      {name=hostname;}
}

~Socket()
{if( fclose(fsck)==-1 )
     P("Errore on close file %s\n", name.c_str());
}

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

// here could be 2 file too and not just one
 FILE*   fsck;
 string  name;
};

int sendMyData(string soapMsg, string host) {
   Socket  req(host);

   R  req.send(soapMsg);
}

int main(void)
{string  s="xml";
 if(sendMyData(s, "thisfile")==-1)
      P("ERROR\n");
 else P("seems ok\n");
 R  0;
}

>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
----------------------------------------------------------------------------------------------------------





0
io_x
7/14/2011 3:34:30 PM
Reply: