[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.c++

passing this object

Jung, William

11/27/2008 9:25:00 AM

I would like to pass "this" object to a constructor of socket class -
Sock which extends CSocketComm.

Once the socket class processed the data, the socket class use the
reference of CVirtualScreen (this object) - screen.setMessage function
to pass back the message to CVirtualScreen.

Is the following a correct syntax of implementing it?

should I involve reference / pointer in this case?

Please advice the incorrect area of the following code.

===================
class CVirtualScreen
{
public:
CVirtualScreen();
~CVirtualScreen();
Sock *sock;
}
===================
CVirtualScreen::CVirtualScreen()
{
// QUESTION ///////////////////////////
// IS IT CORRECT WAY OF PASSING
// THIS OBJECT TO SOCKET CLASS??
// SHOULD I USE & REFERENCE??
// SHOULD I USE POINTER??
sock = new Sock(this);
}

// function must take std::string as parameter
CVirtualScreen::setMessage( std::string message )
{
//setMessage to queue
}
===================
class Sock : public CSocketComm
{
public:
Sock(CVirtualScreen screen);
~Sock();

// QUESTION ///////////////////////////
// DO I DECLARE REFERENCE TO CVirtuaqlScreen LIKE THIS WAY??
CVirtuaqlScreen screen;

virtual void OnDataReceived(const LPBYTE lpBuffer, DWORD dwCount);
bool StartServer();


};
===================
Sock::Sock(CVirtualScreen screen)
{
// QUESTION ///////////////////////////
// CAN I SET REFERENCE TO CVirtualScreen LIKE THIS??
// SHOULD I USE POINTER??
screenObject = screen
StartServer();
}
Sock::~Sock()
{
StopComm();
}
void Sock::OnDataReceived(const LPBYTE lpBuffer, DWORD dwCount)
{
// do some stuff and output the std::string object
std::string message = ... etc
// QUESTION ///////////////////////////
// ONCE SOCKET PROCESSED THE MESSAGE AND EXTRACT THE DATA
// SOCKET WILL PASS THE MESSAGE BACK TO CVirtualScreen TO
// INSERT MESSAGE INTO A MESSAGE QUEUE
// IS THE FOLLOWING COORECT SYNTAX TO PASS MESSAGE BACK TO
// CVirtualScreen CLASS??
screen.setMessage ( message );
}
14 Answers

maverik

11/27/2008 10:50:00 AM

0

On Nov 27, 12:25 pm, "Jung, William" <aopiyy...@yahoo.com> wrote:
> I would like to pass "this" object to a constructor of socket class -
> Sock which extends CSocketComm.
>
> Once the socket class processed the data, the socket class use the
> reference of CVirtualScreen (this object) - screen.setMessage function
> to pass back the message to CVirtualScreen.
>
> Is the following a correct syntax of implementing it?
>
> should I involve reference / pointer in this case?
>
> Please advice the incorrect area of the following code.
>
> ===================
> class CVirtualScreen
> {
> public:
> CVirtualScreen();
> ~CVirtualScreen();
> Sock *sock;}
>
> ===================
> CVirtualScreen::CVirtualScreen()
> {
> // QUESTION ///////////////////////////
> // IS IT CORRECT WAY OF PASSING
> // THIS OBJECT TO SOCKET CLASS??
> // SHOULD I USE & REFERENCE??
> // SHOULD I USE POINTER??
> sock = new Sock(this);

It's ok, but be careful
http://www.parashift.com/c++-faq-lite/ctors.htm...

>
> }
>
> // function must take std::string as parameter
> CVirtualScreen::setMessage( std::string message )
> {
> //setMessage to queue}
>
> ===================
> class Sock : public CSocketComm
> {
> public:
> Sock(CVirtualScreen screen);

Sock(CVirtualScreen * screen);

> ~Sock();
>
> // QUESTION ///////////////////////////
> // DO I DECLARE REFERENCE TO CVirtuaqlScreen LIKE THIS WAY??
> CVirtuaqlScreen screen;

CVirtuaqlScreen *screen;

>
> virtual void OnDataReceived(const LPBYTE lpBuffer, DWORD dwCount);
> bool StartServer();
>
> };
>
> ===================
> Sock::Sock(CVirtualScreen screen)
> {
> // QUESTION ///////////////////////////
> // CAN I SET REFERENCE TO CVirtualScreen LIKE THIS??
> // SHOULD I USE POINTER??
> screenObject = screen
> StartServer();}
>
> Sock::~Sock()
> {
> StopComm();}
>
> void Sock::OnDataReceived(const LPBYTE lpBuffer, DWORD dwCount)
> {
> // do some stuff and output the std::string object
> std::string message = ... etc
> // QUESTION ///////////////////////////
> // ONCE SOCKET PROCESSED THE MESSAGE AND EXTRACT THE DATA
> // SOCKET WILL PASS THE MESSAGE BACK TO CVirtualScreen TO
> // INSERT MESSAGE INTO A MESSAGE QUEUE
> // IS THE FOLLOWING COORECT SYNTAX TO PASS MESSAGE BACK TO
> // CVirtualScreen CLASS??
> screen.setMessage ( message );
>
> }

Look 9.3.2 (14882:2003) for more info about this pointer.

HTH

maverik

11/27/2008 10:53:00 AM

0

On Nov 27, 1:50 pm, maverik <maverik.m...@gmail.com> wrote:
> >         screen.setMessage ( message );

screen->setMessage ( message );

Jung, William

11/27/2008 11:22:00 AM

0

On Thu, 27 Nov 2008 02:50:01 -0800 (PST), maverik
<maverik.mail@gmail.com> wrote:

>On Nov 27, 12:25 pm, "Jung, William" <aopiyy...@yahoo.com> wrote:
>> I would like to pass "this" object to a constructor of socket class -
>> Sock which extends CSocketComm.
>>
>> Once the socket class processed the data, the socket class use the
>> reference of CVirtualScreen (this object) - screen.setMessage function
>> to pass back the message to CVirtualScreen.
>>
>> Is the following a correct syntax of implementing it?
>>
>> should I involve reference / pointer in this case?
>>
>> Please advice the incorrect area of the following code.
>>
>> ===================
>> class CVirtualScreen
>> {
>> public:
>> CVirtualScreen();
>> ~CVirtualScreen();
>> Sock *sock;}
>>
>> ===================
>> CVirtualScreen::CVirtualScreen()
>> {
>> // QUESTION ///////////////////////////
>> // IS IT CORRECT WAY OF PASSING
>> // THIS OBJECT TO SOCKET CLASS??
>> // SHOULD I USE & REFERENCE??
>> // SHOULD I USE POINTER??
>> sock = new Sock(this);
>
>It's ok, but be careful
>http://www.parashift.com/c++-faq-lite/ctors.htm...
>
>>
>> }
>>
>> // function must take std::string as parameter
>> CVirtualScreen::setMessage( std::string message )
>> {
>> //setMessage to queue}
>>
>> ===================
>> class Sock : public CSocketComm
>> {
>> public:
>> Sock(CVirtualScreen screen);
>
>Sock(CVirtualScreen * screen);
>
>> ~Sock();
>>
>> // QUESTION ///////////////////////////
>> // DO I DECLARE REFERENCE TO CVirtuaqlScreen LIKE THIS WAY??
>> CVirtuaqlScreen screen;
>
>CVirtuaqlScreen *screen;
>
>>
>> virtual void OnDataReceived(const LPBYTE lpBuffer, DWORD dwCount);
>> bool StartServer();
>>
>> };
>>
>> ===================
>> Sock::Sock(CVirtualScreen screen)
>> {
>> // QUESTION ///////////////////////////
>> // CAN I SET REFERENCE TO CVirtualScreen LIKE THIS??
>> // SHOULD I USE POINTER??
>> screenObject = screen
>> StartServer();}
>>
>> Sock::~Sock()
>> {
>> StopComm();}
>>
>> void Sock::OnDataReceived(const LPBYTE lpBuffer, DWORD dwCount)
>> {
>> // do some stuff and output the std::string object
>> std::string message = ... etc
>> // QUESTION ///////////////////////////
>> // ONCE SOCKET PROCESSED THE MESSAGE AND EXTRACT THE DATA
>> // SOCKET WILL PASS THE MESSAGE BACK TO CVirtualScreen TO
>> // INSERT MESSAGE INTO A MESSAGE QUEUE
>> // IS THE FOLLOWING COORECT SYNTAX TO PASS MESSAGE BACK TO
>> // CVirtualScreen CLASS??
>> screen.setMessage ( message );
>>
>> }
>
>Look 9.3.2 (14882:2003) for more info about this pointer.
>
>HTH

I following your pointer syntax but I am still getting error
http://www.oniva.com/upload/...

any idea what's wrong here?

the line of
void Create1(CVirtualScreen *Vscreen);
AND
CVirtualScreen *Vscreen;

is having problem

===============
Sock::Sock()
{
StartServer();
}

void Sock::Create1(CVirtualScreen *screen)
{
Vscreen = screen;
}

Sock::~Sock()
{
StopComm();
}
===============
class Sock : public CSocketComm
{
public:
Sock();
~Sock();
void Create1(CVirtualScreen *Vscreen);
CVirtualScreen *Vscreen;

};

Jung, William

11/27/2008 11:36:00 AM

0

The Call to Sock constructor is like this

CVirtualScreen::CVirtualScreen()
{
sock = new Sock();
sock->Create1(this);
}

Jung, William

11/27/2008 11:36:00 AM

0


the whole error log is like this:
http://www.oniva.com/upload/13...

Jung, William

11/27/2008 11:40:00 AM

0

On Thu, 27 Nov 2008 02:53:20 -0800 (PST), maverik
<maverik.mail@gmail.com> wrote:

>On Nov 27, 1:50?pm, maverik <maverik.m...@gmail.com> wrote:
>> > ? ? ? ? screen.setMessage ( message );
>
>screen->setMessage ( message );

why there is error saying
syntax error : missing ';' before '*'
I already put ; at the end of statement

maverik

11/27/2008 12:11:00 PM

0

On Nov 27, 2:39 pm, "Jung, William" <aopiyy...@yahoo.com> wrote:
> why there is error saying
> syntax error : missing ';' before '*'
> I already put ; at the end of statement

CVirtuaqlScreen *screen;
^ is this just a typo?

May be you mean
CVirtualScreen *screen;

maverik

11/27/2008 12:18:00 PM

0

On Nov 27, 2:35 pm, "Jung, William" <aopiyy...@yahoo.com> wrote:
> the whole error log is like this:http://www.oniva.com/upload/13...

1>d:\snd\remote\remotedemo\app\virtualawear\sock.h(31) : error C2061:
syntax error : identifier 'CVirtualScreen'

CVirtualScreen is unknown identifier in sock.h. From where sock.h
should know what the hell is CVirtualScreen?

maverik

11/27/2008 12:30:00 PM

0

On Nov 27, 3:17 pm, maverik <maverik.m...@gmail.com> wrote:
> On Nov 27, 2:35 pm, "Jung, William" <aopiyy...@yahoo.com> wrote:
>
> > the whole error log is like this:http://www.oniva.com/upload/13...
>
> 1>d:\snd\remote\remotedemo\app\virtualawear\sock.h(31) : error C2061:
> syntax error : identifier 'CVirtualScreen'
>
> CVirtualScreen is unknown identifier in sock.h. From where sock.h
> should know what the hell is CVirtualScreen?

Ok. If you included "Sock.h" into the "VirtualScreen.h", you can't
include
"VirtualScreen.h" into "Sock.h" because of circular dependence.

So you can try to write something like:

extern class VirtualScreen;

in Sock.h.

Jung, William

11/27/2008 12:42:00 PM

0

On Thu, 27 Nov 2008 04:29:30 -0800 (PST), maverik
<maverik.mail@gmail.com> wrote:

>On Nov 27, 3:17?pm, maverik <maverik.m...@gmail.com> wrote:
>> On Nov 27, 2:35?pm, "Jung, William" <aopiyy...@yahoo.com> wrote:
>>
>> > the whole error log is like this:http://www.oniva.com/upload/13...
>>
>> 1>d:\snd\remote\remotedemo\app\virtualawear\sock.h(31) : error C2061:
>> syntax error : identifier 'CVirtualScreen'
>>
>> CVirtualScreen is unknown identifier in sock.h. From where sock.h
>> should know what the hell is CVirtualScreen?
>
>Ok. If you included "Sock.h" into the "VirtualScreen.h", you can't
>include
>"VirtualScreen.h" into "Sock.h" because of circular dependence.
>
>So you can try to write something like:
>
>extern class VirtualScreen;
>
>in Sock.h.

Thanks so much your help.

OK, the errors goes away if I use forward class declaration or extern.

but when I added the line (sock.cpp)
Vscreen->PushMessage(std::string((const
char*)m_bReceiveBuffer + j));

where Vscreen is like this
CVirtualScreen *Vscreen; (sock.h)

http://www.oniva.com/upload/1...