PDA

View Full Version : Principiante chide aiuto in c++


Maverick82^
16-12-2002, 20:14
Salve ragazzi, sono un principiante di c++. Volevo chidervi un aiutino. Il codice che ora elenco è una bozza di una classe Coda, magari con qualche errore logico. Bene non so perchè sul DevC++ di windows il compilatore non mi da nessun errore, mentre su qualsiasi versione del g++ su Linux mi da il seguente errore:"undefined reference to 'Coda::Coda[in-charge](std::vector<int, std::allocator<int> >)'". Vi chiede scusa se c'è qualche errore "grave"...


Coda.h:

#include <vector>
#include <string>
#include "Nodo.h"


class Coda {

public:

Coda(vector<int>);
Nodo* insert(int);


bool isEmpty() {return testa==0;}



private:

Nodo *testa;

} ;

-----------------------------------------------------------------------------------------
Coda.cpp:

#include <vector>
#include <string>
#include "Coda.h"
#include "Nodo.h"


Coda::Coda(vector<int>v) {
for(int i=v.size()-1; i>0; i--)
insert(v[i]);
testa=insert(v[0]);
}


Nodo* Coda::insert( int i ) {
Nodo *p=new Nodo(i);
if(isEmpty())
testa=p;
else {
p->right=testa;
testa->left=p;
testa=p;
}
return testa;
}

----------------------------------------------------------------------------------------
Nodo.h:

#ifndef _CODA_H
#define _CODA_H



class Nodo {

public:
friend class Coda;
Nodo(): elemento(0), left(0), right(0){}
Nodo(int i): elemento(i), left(0), right(0){}
Nodo(const Nodo& );


int getElement(){return this->elemento;}

private:

int elemento;
Nodo *left;
Nodo *right;

};
#endif
----------------------------------------------------------------------------------------
Nodo.cpp:

#include "Nodo.h"

Nodo::Nodo(const Nodo& n){
elemento=n.elemento;
left=n.left;
right=n.right;
}
-----------------------------------------------------------------------------------------
Main.cpp:

#include <iostream.h>
#include <vector.h>
#include <string>
#include "Nodo.h"
#include "Coda.h"


int main() {
vector<int>v(2,4);

Coda f(v); // <-- quando viene invocato il costruttore appare l'errore che ho detto prima, ma solo sul g++!!??
Nodo test(5);
cout << test.getElement();
system("PAUSE");
return 0;
}

Grazie..

Maverick82^
18-12-2002, 22:42
Nessuno sa qual è l'errore?
:muro:

whitenoise
30-12-2002, 12:26
Potrebbe trattarsi di un problema di link, poichè utilizzi classi definite in più file.

Quando compili su Linux usi un makefile oppure fai qualcosa del genere gcc coada.cpp?


Gio

ilsensine
30-12-2002, 12:35
Originally posted by "Maverick82^"

su qualsiasi versione del g++ su Linux mi da il seguente errore:"undefined reference to 'Coda::Coda[in-charge](std::vector<int, std::allocator<int> >)'".
A me si compila bene (gcc 2.96)
Nota che non devi linkare con gcc, ma con g++ (oppute con gcc -lstdc++).
Io ho compilato tranquillamente con
g++ -o coda coda.cpp nodo.cpp main.cpp

Black imp
31-12-2002, 01:09
potresti scrivere il comando intero che dai per la compilazione? a occhio ho l'impressione che non trovi il file cpp per cui trova nell'header la dichiarazione di una funzione di cui non trova poi lìimplementazione.

Black imp
31-12-2002, 01:10
Originally posted by "ilsensine"


A me si compila bene (gcc 2.96)
Nota che non devi linkare con gcc, ma con g++ (oppute con gcc -lstdc++).
Io ho compilato tranquillamente con
g++ -o coda coda.cpp nodo.cpp main.cpp

non è che a quello che hai scritto deve anche aggiungere -L<directory in cui c'è coda.cpp> ?

ilsensine
31-12-2002, 09:47
No, in quanto i tre file cpp vengono compilati e linkati staticamente, non è possibile che non ti funzioni...non è che ti manca qualche pacchetto?