PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ost::TCPStream::sync



Giuly
05-09-2005, 02:35
Hallo, ich habe ein Problem mit ost::TCPStream::sync.
und zwar habe ich eine Klasse COnnection:

class connection : public TCPSession
//C'Tor
connection::connection(TCPSocket &serv):
TCPSession(serv, 1024, 0)
{
}

und wenn ich jetzt in dieser Klasse

this->sync() mache, dann sagt mir der compiler:

connection.cpp: In member function `void connection::close()':
connection.cpp:85: error: request for member `sync' is ambiguous
/usr/include/cc++2/cc++/thread.h:1183: error: candidates are: void ost::Thread::sync()
/usr/include/cc++2/cc++/socket.h:1637: error: virtual int ost::TCPStream::sync()
connection.cpp: In member function `bool connection::send(const std::string&)':
connection.cpp:97: error: request for member `sync' is ambiguous
/usr/include/cc++2/cc++/thread.h:1183: error: candidates are: void ost::Thread::sync()
/usr/include/cc++2/cc++/socket.h:1637: error: virtual int ost::TCPStream::sync()
make: *** [connection.o] Error 1

Wie mach ich das richtig?
this->ost::TCPStream::sync(); löst das problem.

locus vivendi
05-09-2005, 11:01
Der Compiler hat recht. TCPSession erbt von zwei Klassen einen gleichlautenden Member. Um die Mehrdeutigkeit aufzuheben, kannst du explizit angeben, welches sync du rufen möchtest.
Z.b. mit dieser Syntax "this->Basisklass::member...", oder indem du "this" geeignet castest, und sync auf dem Resultat aufrufst. Diese Methoden machen aber nicht immer dasselbe, deshalb solltest du dich noch über die Unterschiede informieren, wenn du Überraschungen aus dem Weg gehen willst. Es sei noch angemerkt, dass es noch mehr Möglichkeiten gibt.


Wie mach ich das richtig?
Es wäre gar nicht verkehrt gewesen, wenn du einen Testcase angefertigt hättest. Wenn das zu aufwändig ist, aber zumindest ein Hinweis aus welchem Paket die beteiligten Klassen stammen, das wäre nicht schlecht gewesen. Denn es weiß ja nicht jeder was "ost::TCPStream" ist.