🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: be.comp.programming
11 messages
11 total messages Started by Harbinger of Doom Tue, 15 Jul 2003 18:55
scope probleem (denk ik) in vc++
#4599
Author: Harbinger of Doom
Date: Tue, 15 Jul 2003 18:55
48 lines
2635 bytes
Sorry voor de engelse tekst,
maar kheb dit berichtje in verschillende nieuwsgroepen gepost
en kben vanavond te lui om het naar 't nederlands
te vertalen!

I am currently working on an OO-program.
In that program, I have (among others) two classes,
called "NodeHttpConnection" and "Node"

There are memberfunctions of Node that
use a NodeHttpConnection object.

now, for my problem:
this listing works fine

void Node::connect()
{
     NodeHttpConnection connection; //init connection
     connection.setIP(this->getIPString()); //set IP
     connection.setPort(this->getPort()); //set port

     connected = connection.connect(); //try to connect  (connected is a
                                          //BOOL with class-scope)
}

yet when I declare 'connection' in the class definition of 'Node' (instead
of in the Node::connect() function)
so that it would have class-scope,
I get compile errors whenever I use a Node object.

i.e.
Node nod;
nod = someObject.someFunction();    //someObject.someFunction() returns a
Node object.

things like this give a compiler error saying that there is no
copy-constructor available for the Node-class.
it is true that I don't have a copy-constructor for the Node-class, but it's
strange that
the compiler creates one automatically if 'connection' is declared within
Node::connect()
and doesn't create one when 'connection' is declared in the class-definition
of the Node class.

Any Sugestions?

--
Harbinger Of Doom
Re: scope probleem (denk ik) in vc++
#4601
Author: Harbinger of Doom
Date: Tue, 15 Jul 2003 19:13
46 lines
2771 bytes
"Nicolas Barbier" <anti@spam.invalid> schreef in bericht
news:3f1452ac$0$6523$afc38c87@sisyphus.news.be.easynet.net...
> Harbinger of Doom wrote:
>
> > Sorry voor de engelse tekst,
> > maar kheb dit berichtje in verschillende nieuwsgroepen gepost
> > en kben vanavond te lui om het naar 't nederlands
> > te vertalen!
>
> Multiposten wordt als "extreem evil" beschouwd op USENET.

ekskuzeer,
/me wist dit niet.
then again.... evil is fun ;-) hehe

> > yet when I declare 'connection' in the class definition of 'Node'
(instead
> > of in the Node::connect() function)
> > so that it would have class-scope,
> > I get compile errors whenever I use a Node object.
>
> Als in "Node" een "NodeHttpConnection" zit ingebed, wordt van het 2e de
> copy-constructor aangeroepen telkens de copy-constructor van "Node" wordt
> aangeroepen (als je er zelf geen hebt gedefinieerd voor "Node").

Dat is volgens mij niet echt het probleem.

Noch "Node", noch "NodeHttpConnection" hebben een copy constructor.
Volgens wat ik lees in de VC++ manual zou de compiler er dan z�lf een moeten
aanmaken
die gewoon de default constructor aanroept.
Blijkbaar gebeurd dat al goed en wel, zolang ik mijn
NodeHttpConnection-object declareer
binnen Node::connect();
maar gebeurd dat niet meer als ik mijn NodeHttpConnection-object declareer
in de
klasse-definitie van "Node"
De compiler-errors reppen ook niets over een copy-constructor voor
"NodeHttpConnection",
enkel over een voor "Node"

Ofwel begrijp ik je verkeerd.

--
Harbinger Of Doom
Re: scope probleem (denk ik) in vc++
#4600
Author: Nicolas Barbier
Date: Tue, 15 Jul 2003 19:14
30 lines
2127 bytes
Harbinger of Doom wrote:

> Sorry voor de engelse tekst,
> maar kheb dit berichtje in verschillende nieuwsgroepen gepost
> en kben vanavond te lui om het naar 't nederlands
> te vertalen!

Multiposten wordt als "extreem evil" beschouwd op USENET.

> void Node::connect()
> {
>      NodeHttpConnection connection; //init connection
>      connection.setIP(this->getIPString()); //set IP
>      connection.setPort(this->getPort()); //set port
> 
>      connected = connection.connect(); //try to connect  (connected is a
>                                           //BOOL with class-scope)
> }
> 
> yet when I declare 'connection' in the class definition of 'Node' (instead
> of in the Node::connect() function)
> so that it would have class-scope,
> I get compile errors whenever I use a Node object.

Als in "Node" een "NodeHttpConnection" zit ingebed, wordt van het 2e de 
copy-constructor aangeroepen telkens de copy-constructor van "Node" wordt 
aangeroepen (als je er zelf geen hebt gedefinieerd voor "Node").

-- 
Nicolas Barbier
Re: scope probleem (denk ik) in vc++
#4602
Author: Slayerke
Date: Tue, 15 Jul 2003 19:49
59 lines
3564 bytes
Harbinger of Doom wrote:

> 
> "Nicolas Barbier" <anti@spam.invalid> schreef in bericht
> news:3f1452ac$0$6523$afc38c87@sisyphus.news.be.easynet.net...
>> Harbinger of Doom wrote:
>>
>> > Sorry voor de engelse tekst,
>> > maar kheb dit berichtje in verschillende nieuwsgroepen gepost
>> > en kben vanavond te lui om het naar 't nederlands
>> > te vertalen!
>>
>> Multiposten wordt als "extreem evil" beschouwd op USENET.
> 
> ekskuzeer,
> /me wist dit niet.
> then again.... evil is fun ;-) hehe
> 
>> > yet when I declare 'connection' in the class definition of 'Node'
> (instead
>> > of in the Node::connect() function)
>> > so that it would have class-scope,
>> > I get compile errors whenever I use a Node object.
>>
>> Als in "Node" een "NodeHttpConnection" zit ingebed, wordt van het 2e de
>> copy-constructor aangeroepen telkens de copy-constructor van "Node" wordt
>> aangeroepen (als je er zelf geen hebt gedefinieerd voor "Node").
> 
> Dat is volgens mij niet echt het probleem.
> 
> Noch "Node", noch "NodeHttpConnection" hebben een copy constructor.
> Volgens wat ik lees in de VC++ manual zou de compiler er dan z�lf een
> moeten aanmaken
> die gewoon de default constructor aanroept.
> Blijkbaar gebeurd dat al goed en wel, zolang ik mijn
> NodeHttpConnection-object declareer
> binnen Node::connect();
> maar gebeurd dat niet meer als ik mijn NodeHttpConnection-object declareer
> in de
> klasse-definitie van "Node"
> De compiler-errors reppen ook niets over een copy-constructor voor
> "NodeHttpConnection",
> enkel over een voor "Node"
> 
> Ofwel begrijp ik je verkeerd.
In het geval dat je het lokaal gebruikt, wordt er voor NodeHttpConnection
geen copyconstructor gebruikt (tenzij je nog andere code staan hebt die dat
wel doet). Een copyconstructor door de compiler gegenereerd doet ook meer
dan de default-constructor aanroepen, alle gewone variabelen (en pointers
dus) worden letterlijk gekopieerd, voor objecten wordt de object-specifieke
copyconstructor gebruikt.
Wat zijn de errors letterlijk, hij gaat toch _iets_ meer zeggen dan enkel:
no copy constructor defined for Node?

Misschien eens zelf een copyconstructor maken en kijken wat de compiler dan
uitvindt als error.
-- 
Groeten,
Slayerke
Re: scope probleem (denk ik) in vc++
#4603
Author: Harbinger of Doom
Date: Tue, 15 Jul 2003 21:19
118 lines
5503 bytes
"Slayerke" <slayerkenospammer@slayerke.co.uk> schreef in bericht
news:lVYQa.11896$F92.1353@afrodite.telenet-ops.be...
> Harbinger of Doom wrote:
>
> >
> > "Nicolas Barbier" <anti@spam.invalid> schreef in bericht
> > news:3f1452ac$0$6523$afc38c87@sisyphus.news.be.easynet.net...
> >> Harbinger of Doom wrote:
> >>
> >> > Sorry voor de engelse tekst,
> >> > maar kheb dit berichtje in verschillende nieuwsgroepen gepost
> >> > en kben vanavond te lui om het naar 't nederlands
> >> > te vertalen!
> >>
> >> Multiposten wordt als "extreem evil" beschouwd op USENET.
> >
> > ekskuzeer,
> > /me wist dit niet.
> > then again.... evil is fun ;-) hehe
> >
> >> > yet when I declare 'connection' in the class definition of 'Node'
> > (instead
> >> > of in the Node::connect() function)
> >> > so that it would have class-scope,
> >> > I get compile errors whenever I use a Node object.
> >>
> >> Als in "Node" een "NodeHttpConnection" zit ingebed, wordt van het 2e de
> >> copy-constructor aangeroepen telkens de copy-constructor van "Node"
wordt
> >> aangeroepen (als je er zelf geen hebt gedefinieerd voor "Node").
> >
> > Dat is volgens mij niet echt het probleem.
> >
> > Noch "Node", noch "NodeHttpConnection" hebben een copy constructor.
> > Volgens wat ik lees in de VC++ manual zou de compiler er dan z�lf een
> > moeten aanmaken
> > die gewoon de default constructor aanroept.
> > Blijkbaar gebeurd dat al goed en wel, zolang ik mijn
> > NodeHttpConnection-object declareer
> > binnen Node::connect();
> > maar gebeurd dat niet meer als ik mijn NodeHttpConnection-object
declareer
> > in de
> > klasse-definitie van "Node"
> > De compiler-errors reppen ook niets over een copy-constructor voor
> > "NodeHttpConnection",
> > enkel over een voor "Node"
> >
> > Ofwel begrijp ik je verkeerd.
> In het geval dat je het lokaal gebruikt, wordt er voor NodeHttpConnection
> geen copyconstructor gebruikt (tenzij je nog andere code staan hebt die
dat
> wel doet). Een copyconstructor door de compiler gegenereerd doet ook meer
> dan de default-constructor aanroepen, alle gewone variabelen (en pointers
> dus) worden letterlijk gekopieerd, voor objecten wordt de
object-specifieke
> copyconstructor gebruikt.
> Wat zijn de errors letterlijk, hij gaat toch _iets_ meer zeggen dan enkel:
> no copy constructor defined for Node?
>
> Misschien eens zelf een copyconstructor maken en kijken wat de compiler
dan
> uitvindt als error.

De errors die ik krijg:

LIJN:
result =
calculateCreationTime(buffer[pointer+11],buffer[pointer+10],buffer[pointer+9
],buffer[pointer+8], result); //result zijnde een Node-object

DEFINITIE VAN calculateCreationTime():
Node calculateCreationTime(int byte1, int byte2, int byte3, int byte4, Node
a);

ERROR:
e:\nodelist.h(75) : error C2664: 'calculateCreationTime' : cannot convert
parameter 5 from 'class Node' to 'class Node'
        No copy constructor available for class 'Node'


LIJN:
return result;    //result zijnde een Node-object

ERROR:
e:\nodelist.h(77) : error C2558: class 'Node' : no copy constructor
available


LIJN:
sn = nl.getNode(i);    //sn zijnde een Node-object en getNode() zijnde een
functie die een Node-object returned

ERROR:
E:\mfcDlg.cpp(199) : error C2582: 'Node' : 'operator =' function is
unavailable


Ik vind het raarste van alles nog steeds dat ik errors krijg ivm
een copy-constructor voor "Node", en niet voor "NodeHttpConnection".
Zoals Nicholas al zei. Er wordt een copy-constructor aangeropen van
"NodeHttpConnection"
als er een copy-constructor van "Node" aangeroepen wordt.
Bijgevolg zou ik toch voor beide moeten errors krijgen? of niet?

Eerst dacht ik dat door ��n of ander kutfoutje de klasse "Node" misschien
niet
meer gecompileerd werd, maar gezien dat ik geen error krijg bij de
declaratie
van een Node-object, wil dat volgens mij zeggen dat de default constructor
wel nog werkt, dus moet het toch zijn dat Node gecompileerd wordt.

Ik denk trouwens dat ik een "undeclared identifier"-error zou krijgen
telkens ik het woord "Node" gebruik in andere klassen en functies.

--
HoD
Re: scope probleem (denk ik) in vc++
#4604
Author: Roel Schroeven
Date: Wed, 16 Jul 2003 00:06
39 lines
2419 bytes
Harbinger of Doom wrote:
> Sorry voor de engelse tekst,
> maar kheb dit berichtje in verschillende nieuwsgroepen gepost
> en kben vanavond te lui om het naar 't nederlands
> te vertalen!
> 
> I am currently working on an OO-program.
> In that program, I have (among others) two classes,
> called "NodeHttpConnection" and "Node"
> 
> There are memberfunctions of Node that
> use a NodeHttpConnection object.
> 
> now, for my problem:
> this listing works fine
> 
> void Node::connect()
> {
>      NodeHttpConnection connection; //init connection
>      connection.setIP(this->getIPString()); //set IP
>      connection.setPort(this->getPort()); //set port
> 
>      connected = connection.connect(); //try to connect  (connected is a
>                                           //BOOL with class-scope)
> }
> 
> yet when I declare 'connection' in the class definition of 'Node' (instead
> of in the Node::connect() function)
> so that it would have class-scope,
> I get compile errors whenever I use a Node object.

Ik probeer je probleem hier te reconstrueren, maar het lukt me niet. Kan
je de klassedefinitie van Node eens geven, of minstens de relevante
stukken daarvan (alle constructors, plus de declaratie van connection)?
En eventueel ook hetzelfde voor NodeHttpConnection?

-- 
"Codito ergo sum"
Roel Schroeven
Re: scope probleem (denk ik) in vc++
#4611
Author: Harbinger of Doom
Date: Wed, 16 Jul 2003 21:12
104 lines
3700 bytes
> Ik probeer je probleem hier te reconstrueren, maar het lukt me niet. Kan
> je de klassedefinitie van Node eens geven, of minstens de relevante
> stukken daarvan (alle constructors, plus de declaratie van connection)?
> En eventueel ook hetzelfde voor NodeHttpConnection?
>
> --
> "Codito ergo sum"
> Roel Schroeven
>

Ik heb de raad gekregen om voor beide klassen een copy-constructor
aan te maken.
Dit heb ik gedaan, en ik krijg nu idd geen errors meer die
klagen over het niet aanwezig zijn van een copy-constructor.
Ik krijg nu echter wel compiler errors die zeggen:
'Node' : 'operator =' function is not available.

Ik heb inderdaad ook geen functie die 'operator =' override,
maar ik heb voordien wel nooit problemen gehad om
een object van een zelfgemaakte klasse te returnen.
anyway, hier is de declaratie van de twee klassen
(relevante stukken)

DE KLASSE NODE:
class Node
{
private:
     IP ip;
     int port;
     short load;
     short availability;
     CreationDate creationdate;
     char stringIP[16];
     NodeHttpConnection connection;

protected:
     BOOL connected;

public:
     Node();
    ~Node();
     Node(class Node& sn);
     CString connect();
};

DE NODE::CONNECT() FUNCTIE:
CString Node::connect()
{
     this->connection.setIP(this->getIPString()); //set IP
     this->connection.setPort(this->getPort()); //set port

     CString retValue;

     connected = this->connection.connect(); //try to connect
     if(connected) retValue.Insert(retValue.GetLength(),"Connection
Established");
     else retValue.Insert(retValue.GetLength(),"An Error Occured");

     return retValue;
}


DE NODEHTTPCONNECTION KLASSE:
class NodeHttpConnection
{
     friend class Node;

private:
     CInternetSession session;
     char url[23];
     int port;
     CHttpConnection* connection;

public:
     NodeHttpConnection();
     ~NodeHttpConnection();
     NodeHttpConnection(class NodeHttpConnection& snhc);
     BOOL connect();
     void disconnect();
};

DE NODEHTTPCONNECTION::CONNECT() FUNCTIE
BOOL NodeHttpConnection::connect()
{
     char* userName = "username";
     char* password = "password;

     try{
         connection =
session.GetHttpConnection(&this->url[0],this->port,userName,password);
         return TRUE;
     }

     catch(CInternetException* e)
     {
          e->Delete();
          return FALSE;
     }
}

hopelijk kan je hiermee iets beter simuleren wat mijn probleem is.

--
HoD
Re: scope probleem (denk ik) in vc++
#4612
Author: Harbinger of Doom
Date: Wed, 16 Jul 2003 21:25
40 lines
2486 bytes
>
> hopelijk kan je hiermee iets beter simuleren wat mijn probleem is.
>

Mja, ik heb nu nog vlug in alletwee de klassen een
functietje voor operator= geschreven.
heel simpel:
Node Node::operator= (Node sn) {return sn;}
en
NodeHttpConnection NodeHttpConnection::operator= (NodeHttpConnection snhc)
{return snhc;}

ik krijg nu geen errors meer voor mijn twee klassen, maar ik kan niet testen
of het nu al dan niet werkt,
gezien ik wel nog eenzelfde error krijg (= 'operator=' not available), voor
de
klasse CInternetSession.
Dit is ��n van de windows MFC klassen, waar ik dus niet mag aanzitten.
bijgevolg denk ik dat mijn fout toch echt wel elders moet zitten hoor.
Of is dat normaal dat je MFC objecten niet kunt returnen als functiewaarde?

De error doet zich voor in de copy-constructor van NodeHttpConnection.
dit is'm:

NodeHttpConnection::NodeHttpConnection(class NodeHttpConnection& snhc)
{
     connection = snhc.connection;
     port = snhc.port;
     session = snhc.session; //<-- error
     for(int i = 0; i < 23;i++)
     {
          url[i] = snhc.url[i];
     }
}

heb ik hier misschien ergens in gemist??

--
HoD
Re: scope probleem (denk ik) in vc++
#4614
Author: Roel Schroeven
Date: Wed, 16 Jul 2003 23:06
31 lines
2481 bytes
Harbinger of Doom wrote:
>> Ik probeer je probleem hier te reconstrueren, maar het lukt me niet. Kan
>> je de klassedefinitie van Node eens geven, of minstens de relevante
>> stukken daarvan (alle constructors, plus de declaratie van connection)?
>> En eventueel ook hetzelfde voor NodeHttpConnection?
>>
>> --
>> "Codito ergo sum"
>> Roel Schroeven
>>
> 
> Ik heb de raad gekregen om voor beide klassen een copy-constructor
> aan te maken.
> Dit heb ik gedaan, en ik krijg nu idd geen errors meer die
> klagen over het niet aanwezig zijn van een copy-constructor.
> Ik krijg nu echter wel compiler errors die zeggen:
> 'Node' : 'operator =' function is not available.
> 
> Ik heb inderdaad ook geen functie die 'operator =' override,
> maar ik heb voordien wel nooit problemen gehad om
> een object van een zelfgemaakte klasse te returnen.

Het heeft, denk ik, niet zozeer te maken met het returnen op zich; wel
met het toewijzen van die geretourneerde waarde aan een andere variable.
Je schrijft, als ik me niet vergis, ergens iets in de trant van
node = function(node)
Het probleem zet hem niet (meer) in function(node), wel in node =.

-- 
"Codito ergo sum"
Roel Schroeven
Re: scope probleem (denk ik) in vc++
#4615
Author: Roel Schroeven
Date: Thu, 17 Jul 2003 08:39
49 lines
2534 bytes
Harbinger of Doom wrote:
> De error doet zich voor in de copy-constructor van NodeHttpConnection.
> dit is'm:
> 
> NodeHttpConnection::NodeHttpConnection(class NodeHttpConnection& snhc)
> {
>      connection = snhc.connection;
>      port = snhc.port;
>      session = snhc.session; //<-- error
>      for(int i = 0; i < 23;i++)
>      {
>           url[i] = snhc.url[i];
>      }
> }
> 
> heb ik hier misschien ergens in gemist??

Je wijst hier een CInternetSession-object toe aan een ander
CInternetSession-object. Nog even afgezien van het feit of de compiler
dat al dan niet toelaat, denk ik dat dat een slecht idee is. Een sessie
is een sessie. Je zal ofwel dat object moeten delen tussen verschillende
NodeHttpConnection-instanties als je het wil hergebruiken, ofwel zal je
een nieuw moeten maken.

Als je die verschillende objecten eigenlijk niet nodig hebt, maar de
copy-constructor en operator= alleen om ze te kunnen doorgeven aan
functies, doe je er beter aan van pass-by-reference te gebruiken in
plaats van pass-by-value.

void ByValue(Node node)
{
    // ...
}

void ByReference(Node &node)
{
    // ...
}

// ...

Node node;

ByValue(node);      // de functie krijgt een kopie van node
ByReference(node);  // de functie werkt op node zelf

-- 
"Codito ergo sum"
Roel Schroeven
Re: scope probleem (denk ik) in vc++
#4620
Author: Harbinger of Doom
Date: Thu, 17 Jul 2003 13:32
15 lines
1761 bytes
> Beetje naast de kwestie, maar die 'class' in de copy constructor is niet
> nodig. Wel wordt daar over het algemeen een const gebruikt:
>     Node(const Node &sn);
>
dankt u, kweet dat ondertussen ook :-)
voor de rest geraak ik er zelf niet meer aan uit aan
mijn probleem. Kheb een beetje teveel "Gebronseld" zoals we
dat hier zeggen.
Kzal wel een andere (betere & gemakkelijkere) oplossing zoeken.

Toch bedankt voor de vele hulp!!

--
HoD
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads