Newsgroup: it.comp.lang.c++
Titolo: abstract type

Sto cercando di portare un modulo da omnet3.x a omnet4.x.
non l'ho scritto io purtroppo quindi non so perfettamente come funziona,
ma ottengo degli errori che non riesco a capire.
In particolare qui sotto si lamenta apparentemente che mancano le
definizioni di alcune funzioni pure, ma nel mio codice SONO definite.
Può essere qualcos altro a generare questo tipo di errore?
--8<---------------cut here---------------start------------->8---
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc: In function ‘cObject* __uniquename_29()’:
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:29:1: error: cannot allocate an object of abstract type ‘Ieee80211MacWifiFw’
linklayer/ieee80211/mac/Ieee80211MacWifiFw.h:56:1: note:   because the following virtual functions are pure within ‘Ieee80211MacWifiFw’:
base/INotifiable.h:41:18: note: 	virtual void INotifiable::receiveChangeNotification(int, const cPolymorphic*)
linklayer/mfcore/WirelessMacBase.h:69:18: note: 	virtual void WirelessMacBase::handleUpperMsg(cPacket*)
linklayer/mfcore/WirelessMacBase.h:75:18: note: 	virtual void
WirelessMacBase::handleLowerMsg(cPacket*)
--8<---------------cut here---------------end--------------->8---
Poi ci sono altri errori di tipi o di membri mancanti ma questi magari
sono più semplici da aggiustare...
--8<---------------cut here---------------start------------->8---
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc: In member function ‘virtual void Ieee80211MacWifiFw::registerInterface()’:
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:156:62: error: invalid conversion from ‘IInterfaceTable*’ to ‘InterfaceTable*’
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc: In member function ‘virtual void Ieee80211MacWifiFw::handleUpperMsg(cMessage*)’:
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:223:14: error: ‘class cMessage’ has no member named ‘getBitLength’
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:230:53: warning: comparison between signed and unsigned integer expressions
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:241:57: error: ‘class cMessage’ has no member named ‘getByteLength’
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc: In member function ‘void Ieee80211MacWifiFw::scheduleReservePeriod(Ieee80211Frame*)’:
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:703:46: error: ‘max’ was not declared in this scope
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc: In member function ‘void Ieee80211MacWifiFw::generateBackoffPeriod()’:
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:733:70: error: cannot convert ‘simtime_t’ to ‘double’ in assignment
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc: In member function ‘void Ieee80211MacWifiFw::decreaseBackoffPeriod()’:
linklayer/ieee80211/mac/Ieee80211MacWifiFw.cc:742:78: error: no match for ‘operator-=’ in ‘((Ieee80211MacWifiFw*)this)->Ieee80211MacWifiFw::backoffPeriod -= operator*(double, const SimTime&)(((const SimTime&)((const SimTime*)(& Ieee80211MacWifiFw::SlotPeriod()()))))’
make[1]: *** [../out/gcc-debug//src/linklayer/ieee80211/mac/Ieee80211MacWifiFw.o] Error 1
make[1]: Leaving directory `/root/inet/src'
make: *** [all] Error 2
--8<---------------cut here---------------end--------------->8---

 writes:
[...]
Un altra cosa piuttosto fastidiosa che ho notato.
Quando ricompilo un progetto c++ con le mie modifiche (in particolare
inet 
http://inet.omnetpp.org/
).
in sostanza se ne frega delle mie modifiche fino a che non dò un "make
clean".
Strano perché comunque sembra ricompilare le parti interessate, come può essere?