Scompari -.-
Scompari -.-
I'm no hero. Never was. Never will be.
-----
Soul of the mind, key to life's ether
Soul of the lost, withdrawn from its vessel
May strength be granted so the world might be mended...
So the world might be mended...
Puoi postare la command line che c'e' sotto Linker nelle properties?
Quelle sono le opzioni che effettivamente usa il linker in base a tutte le impostazioni del progetto.
Probabilmente manca qualcosa li dentro, direi la .lib da linkare visto che non riesci ad aggiungerla dal menu.
Eccola:
/OUT:"C:\Documents and Settings\HaX\Documenti\Visual Studio 2008\Projects\progettoRobotica\Debug\testEsecuzion e.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Documents and Settings\HaX\Documenti\Visual Studio 2008\Projects\progettoRobotica\Debug" /LIBPATH:"C:\Documents and Settings\HaX\Documenti\Visual Studio 2008\Projects\progettoRobotica\progettoRobotica\De bug" /MANIFEST /MANIFESTFILE:"Debug\testEsecuzione.exe.intermediat e.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Documents and Settings\HaX\Documenti\Visual Studio 2008\Projects\progettoRobotica\Debug\testEsecuzion e.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib "..\debug\progettorobotica.lib"
I'm no hero. Never was. Never will be.
-----
Soul of the mind, key to life's ether
Soul of the lost, withdrawn from its vessel
May strength be granted so the world might be mended...
So the world might be mended...
Non mi torna questo:
"..\debug\progettorobotica.lib"
dovrebbe esserci il nome della lib e basta, come tutte le altre.
Il path lo prende da /LIBPATH.
A parte questo mi sembra tutto a posto, cmq il codice di errore e' quello tipico di quando non trova la dll.
Quindi come posso sistemare?![]()
I'm no hero. Never was. Never will be.
-----
Soul of the mind, key to life's ether
Soul of the lost, withdrawn from its vessel
May strength be granted so the world might be mended...
So the world might be mended...
Eh senza avere davanti tutto il codice e i progetti e' difficile dire piu' di questo.
Io ho VS2005 e non il 2008, non so se e' cambiato il sistema per aggiungere le dll come reference. Non riesci ad aggiungerla come ti ho detto? Nel linker dovrebbe semplicemente esserci il nome, il path lo prende da una variabile diversa (e dalla corrispondente opzione nelle properties).
Ma la dichiarazione della funzione Parse nel .cpp della dll poi l'hai compilata con parseECF:: ? Altrimenti e' chiaro che non lo trova, cosi' e' definita come funzione, non come metodo della classe parseECF.
Non so se sono stato chiaro, ma e' un po' arduo da spiegare a parole.
No non me lo faceva aggiungere, cmq ho abdicato.
Faccio un progetto console normalissimo e lo presento al prof, se vuole DOPO glielo trasformo in dll in qualche cazzo di maniera (magari mi illumina lui su come fare, anche se ho già avuto un'idea che in teoria mi risolverebbe tutti i problemi di sto tipo, ma per ora chissene mi sto sbattendo ad implementare).
Btw visto che sto appunto implementando, non esiste un container non tipizzato in c++ come ad esempio le collection in java? :O
Mi serve una struttura dati che mi tenga dentro N elementi di tipo eterogeneo, l'unica cosa carina che ho trovato è il vector che però purtroppo è tipizzato. La mia speranza era quella di dichiarare un vector della classe padre e sperare che non rompesse i coglioni quando lo riempivo di oggetti di classi figlie.. difatti sulla push non rompe, il problema è quando cerchi di reperire i dati dal vector scopri che son magicamente diventati di tipo "classe padre".. non so se mi spiego
Un container più intelligente non esiste? t_T
edit:
per spiegarmi meglio, se io dichiaro:
vector<animale> x;
e poi faccio
x.push_back(new cane());
me lo genera e non rompe le palle.. se però vado a cercare di accedere direttamente all'ultimo oggetto inserito, cioè un oggetto di tipo cane, nella seguente maniera:
x.back()->"metodo random"; i metodi/attributi che mi mostra e che posso usare sono quelli della classe padre.
Difatti provo a reperire l'oggetto così:
cane* y = x.back();
mi da errore in compilazione in quanto impossibile convertire da animale a cane.. t_T
Last edited by Axet; 29th October 2009 at 20:38.
I'm no hero. Never was. Never will be.
-----
Soul of the mind, key to life's ether
Soul of the lost, withdrawn from its vessel
May strength be granted so the world might be mended...
So the world might be mended...
Prova ad usare un vettore di puntatori invece di type:
vector<animale*> x;
o cmq puoi sempre provare con un type non definito:
vector<void*> x;
gli elementi che recuperi per l'elaborazione devo essere 'castati' nella classe type che ti serve o nativa:
x.push_back(new animale());
animale* y = (animale*)x.back();
EDIT:
^^
cane* y = x.back();
cane* y = (cane*)&x.back();
Last edited by mahoney; 29th October 2009 at 21:23.
Si pardon ho scritto male io, ovviamente dichiaro un vettore di puntatori.
Thanks provo sia col metodo del void che con il cast (anche se l'avevo cassato perchè temevo di dover fare upcasting e downcasting con conseguende copy constructor e visto che son neofita del c++ è meglio che non mi spingo troppo in la).
In caso cmq non riesca con nessuno dei metodi continuo come sto facendo ora, cioè N vettori di N tipi diversi e poi mi arrangio in qualche modo
edit:
provato.. non funziona nessuno dei due metodi ma pensandoci il motivo è molto semplice. Quando sbatti l'oggetto della classe figlia nel vector viene automaticamente fatto il cast alla classe padre. Di conseguenza, essendo un cast da una classe più specifica a una meno specifica vi è perdita di informazioni. Dato questo fattore, un cast "al contrario" da padre a figlia è ovviamente impossibile perchè le informazioni perse durante il primo cast sono, per l'appunto, scomparse e non è che saltano fuori dal nulla![]()
Last edited by Axet; 29th October 2009 at 21:25.
I'm no hero. Never was. Never will be.
-----
Soul of the mind, key to life's ether
Soul of the lost, withdrawn from its vessel
May strength be granted so the world might be mended...
So the world might be mended...
Argh C++ ... non posso aiutare qua, lo ho studiato solo quando cercavo lavoro con Goldman Sachs e quando non e' andata ho lasciato andare.
OT ti hanno chiamato per l'inteview da GS? io ho fatto l'application, ma avendo poche working experiences e senza alcun voto del master, la vedo dura che mi chiamino...
'need' le dichiarazioni delle due classi, padre e figlia.
Edit:
suppongo che stai usando classi derivate; il padre (animale) è il riferimento ad una specie animale, e la figlia la specie in dettaglio:
class animale
{
public:
string m_specie;
};
class cane: public animale
{
public:
int m_nZampe;//quante zampe
int m_nDenti;//quanti denti
int m_sesso;//0mas//1fem//2e
int m_alimentazione;//0carne//1vege//2onni
};
Edit2:
se invece usi classi 'nested' ed avere i figli all'interno della classe padre:
class cane
{
public:
string m_specie;
cane* m_myFather;//alla creazione inserisci qui il colpevole
vector<cane*>figli;
};
Last edited by mahoney; 29th October 2009 at 23:16.
Uso classi derivate.. cmq sono abbastanza sicuro che sia come ho detto prima, se tu casti dalla classe figlia alla classe padre avrai inevitabilmente una perdità di specificità che è irrecuperabile visto che le informazioni, di fatto, scompaiono.
Mi son rassegnato all'inferiorità del c++ rispetto a java (flamehh) e di conseguenza all'uso di più vector di tipo differente
![]()
I'm no hero. Never was. Never will be.
-----
Soul of the mind, key to life's ether
Soul of the lost, withdrawn from its vessel
May strength be granted so the world might be mended...
So the world might be mended...
Taci, stolto infedele, il c++ è il verbo. Supponiamo che tu abbia la classe madre e classe figlia, e tu debba mettere gli oggetti della classe figlia in un array della classe madre, ma poi accedervi tramite i metodi della classe figlia. Allora, l'array della classe base dev'essere di puntatori alla classe base, in modo che tu possa creare gli oggetti nello heap. A quel punto, assegni nell'array l'indirizzo dell'oggetto, dopodichè assegni ad un puntatore della classe figlia lo stesso indirizzo salvato nel puntatore dell'array della classe base. Non c'è alcuna perdita di informazione, perchè non c'è alcun assegnamento.
Happiness in intelligent people is the rarest thing I know.
Vero, dopo una giornata a sbattere la testa su sta merda non ci avevo pensato.
Btw però così facendo avrei bisogno di un puntatore per ogni oggetto nel container, a sto punto manco mi servirebbe più il vector
Cioè non posso fare così, mi serve che sia gestibile dinamicamente :O
I'm no hero. Never was. Never will be.
-----
Soul of the mind, key to life's ether
Soul of the lost, withdrawn from its vessel
May strength be granted so the world might be mended...
So the world might be mended...