Salut tout le monde Je voulais juste m'exercer à un modèle C++ mais j'ai des erreurs de liens. Est-ce que quelqu'un peut m'aider s'il vous plaît? Voici mon code:Classe de modèle C++ Problème
// File: MyClass.h
#ifndef _MYCLASS_H
#define _MYCLASS_H
template<class T> class MyClass {
T value;
public:
MyClass(T v);
~MyClass();
};
#endif // _MYCLASS_H
// File: MyClass.cpp
#include "MyClass.h"
template<class T> MyClass<T>::MyClass(T v) {
value = v;
}
template<class T> MyClass<T>::~MyClass() {
}
// File: main.cpp
#include "MyClass.h"
int main() {
MyClass<int> test(10);
return 0;
}
est ici la sortie de ligne de commande:
g++ main.cpp -c
g++ MyClass.cpp -c
g++ main.o MyClass.o -o Out
main.o: In function `main':
main.cpp:(.text+0x1a): undefined reference to `MyClass<int>::MyClass(int)'
main.cpp:(.text+0x2b): undefined reference to `MyClass<int>::~MyClass()'
collect2: ld returned 1 exit status
make: *** [all] Error 1
Comme vous pouvez le voir, je suis en utilisant Ubuntu 10.04 et compilateur GNU C++. Est-ce qu'il me manque quelque chose dans ce code?
Merci pour les réponses. Cela fonctionne mais n'existe-t-il pas une meilleure façon de protéger le code? Par exemple, que se passe-t-il si je veux créer une bibliothèque non-opensource ?! Je veux exporter le code vers une bibliothèque statique. et lier la bibliothèque à d'autres projets ...
'MyClass.cpp' et' main.cpp' sont compilés séparément (différentes unités de traduction), donc quand votre compilateur compile le 'MyClass.cpp' il ne sait pas pour quels arguments il doit être instancié. vous devez déplacer la définition et la déclaration vers 'main.cpp'. –