che cos'è un linker error?
che cos'è un linker error?
Un errore del linker.
Il linker e' un programma che viene eseguito dopo che il compilatore ha terminato il proprio compito.
Questo prende tutti i file oggetto e le librerie e li "unisce" risolvendo le chiamate e trasformando il tutto in un eseguibile.
Per essere piu' precisi, indica di quale errore si tratta.
questo programma ordina gli elementi di due array ( uno di tipo intero e l'altro di tipo float )
usando i template
dopo aver compilato il programma mi segnala questi errori:
[Linker error] undefined reference to `swap(int*, int*)'
[Linker error] undefined reference to `swap(float*, float*)'
#include <iostream>
#include <stdlib.h>
using namespace std;
template< class T >
void bobbleSort( T *Ptr, const int count )
{
void swap ( T*, T* );
for ( int pass = 0; pass < count - 1; pass++ )
for ( int j = 0; j < count - 1; j++)
if (Ptr[j] > Ptr[j + 1] )
swap( &Ptr[j], &Ptr[j + 1] );
}
template< class T >
void swap( T *elPtr1, T *elPtr2 )
{
T Hold = *elPtr1;
*elPtr1 = *elPtr2;
*elPtr2 = hold;
}
int main()
{
const int Count = 9;
int a[Count] = {12,76,45,23,85,26,10,55,70 };
float b[Count] = {12.6,76.3,54.9,23.7,43.8,32.1,47.4,28.6,13.7};
cout << "Gli elementi dell' array 'a[Count]' sono:\n";
for ( int i = 0; i < Count; i++)
cout << a[i] << " ";
bobbleSort ( a, Count );
cout << "\nGli elementi dell' array 'a[Count]' in ordine crescente sono:\n";
for ( int i = 0; i < Count; i++ )
cout << a[i] << " ";
cout << "\nGli elementi dell' array 'b[Count]' sono:\n";
for ( int i = 0; i < Count; i++)
cout << b[i] << " ";
bobbleSort ( b, Count );
cout << "\nGli elementi dell' array 'b[Count]' in ordine crescente sono:\n";
for ( int i = 0; i < Count; i++ )
cout << b[i] << " ";
system("PAUSE");
return 0;
}
1) metti la funzione swap nel sorgente *prima* delle bobbleSort (a proposito ... non si dovrebbe chiamare bubbleSort? ... comunque non importa) ...
2) elimina la dichiarazione void swap ( T*, T* ); che hai inserito all'interno della bobbleSort;
3) nella swap utilizza la variabile hold stando attento alle minuscole/maiuscole (in C/C++ sono fondamentali) ... o si chiama Hold o si chiama hold ...
ciao oregon,ti ringrazio per avermi risposto, ma purtroppo non ho capito il primo punto della tua risposta
mi potresti dare ulteriri chiarimenti?
grazie
Cosa c'e' da chiarire? Sposta *fisicamente* il codice della funzione ... mettila *prima* della funzione bobblesort ...