PDA

View Full Version : [C++/Assembly] problema di collegamento


Eddie1985
13-06-2011, 18:59
salve
dunque ho messo nella stessa cartella i seguenti 3 files: prova1.cpp , cc.h e es1.s . I primi due file sono così fatti:

// prova1.cpp

#include "cc.h"

int main()

{ st s = { 1,2,3,4, 1.0,2.0,3.0,4.0 };

int v[4] = {10,11,12,13 };

double d = 2.5;

cl cc1(v); cc1.stampa();

cc1.elab1(s, d); cc1.stampa();

cout << d << endl;

}


#include <iostream>

using namespace std;

struct st { int vv1[4]; double vv2[4]; };

class cl

{ int a, b; st s;

public:

cl(); cl(int v[]);

void elab1(st ss, double& d);

cl elab2(cl cc);

void stampa()

{ int i; cout << a << ' ' << b << endl;

for (i=0;i<4;i++) cout << s.vv1[i] << ' '; cout << '\t';

for (i=0;i<4;i++) cout << s.vv2[i] << ' '; cout << endl;

cout << endl;

}

};


Il file es1.s è in Assembly e non lo sto a riportare in quanto non è quello la causa del problema (almeno penso :P ).

Premesso questo quando do il comando:
gxx -o es1 -fno-elide-constructors es1.s prova1.cpp

mi da il seguente errore:
In function `main':
prova1.cpp:(.text+0xae): undefined reference to `cl::cl(int*)'
prova1.cpp:(.text+0x14f): undefined reference to `cl::elab1(st, double&)'
collect2: ld returned 1 exit status

Qualcuno sa dirmi come posso risolvere? Grazie

Eddie1985
14-06-2011, 14:59
non mi sa aiutare nessuno?

clockover
14-06-2011, 15:34
Se non sbaglio è un errore di linking. Cioè hai dichiarato la tua funzione, ad esempio funzione1(int*) e per il compilatore non c'è nessun problema, ma quando poi il linker va ad unire il tutto, funzione1(int * var){codice} non la trova da nessuna parte!

Nel tuo caso cl(int*) e elab1(....) non riesce a trovare le loro implementazioni.

Ma conviene implementare una classe in un header? E' una domanda la mia perchè in C non è cosa buona e giusta implementare una funzione in un file header.

Eddie1985
14-06-2011, 15:53
Se non sbaglio è un errore di linking. Cioè hai dichiarato la tua funzione, ad esempio funzione1(int*) e per il compilatore non c'è nessun problema, ma quando poi il linker va ad unire il tutto, funzione1(int * var){codice} non la trova da nessuna parte!

Nel tuo caso cl(int*) e elab1(....) non riesce a trovare le loro implementazioni.

Ma conviene implementare una classe in un header? E' una domanda la mia perchè in C non è cosa buona e giusta implementare una funzione in un file header.

si immaginavo anche io che il problema fosse una cosa del genere...solo che nn riesco a capire perchè....per quanto riguarda la convenienza nell'implementare una funzione in un file o meno, non mi sono posto il problema, perchè sono esercizi di esame, io devo fare solo il file es1.s, il resto lo devo lasciar stare così come è :)