Perchè il seguente programma produce un errore di compilazione?
Precisamente questo errore (IDE Visual Studio):
1>Main.obj : error LNK2019: riferimento al simbolo esterno "public: void __thiscall Prova:
rint<char>(char)const " (??$print@D@Prova@@QBEXD@Z) non risolto nella funzione _main
1>c:\users\marco\documents\visual studio 2010\Projects\Prova\Debug\Prova.exe : fatal error LNK1120: 1 esterni non risolti
codice:
// Main.cpp
#include "Prova.h"
int main()
{
Prova prova;
prova.print( 'a' );
return 0;
}
// Prova.h
#ifndef PROVA_H
#define PROVA_H
class Prova
{
public:
template <typename T>
void print( const T ) const;
};
#endif
// Prova.cpp
#include <iostream>
using std::cout;
using std::endl;
#include "Prova.h"
template <typename T>
void Prova::print( const T c ) const
{
cout << c << endl;
}
L'unico modo per farlo funzionare sembra essere questo (senza utilizzare Prova.ccp), Prova.h si modifica in:
codice:
#ifndef PROVA_H
#define PROVA_H
#include <iostream>
using std::cout;
using std::endl;
class Prova
{
public:
template <typename T>
void print( const T ) const;
};
template <typename T>
void Prova::print( const T c ) const
{
cout << c << endl;
}
#endif
Potete spiegarmi le motivazioni di questo comportamento in dettaglio, e/o come risolvere il problema?
Grazie.