Je reçois des erreurs en essayant de compiler une classe de modèle C ++ qui est divisée entre un .hppet un .cppfichier:
$ g++ -c -o main.o main.cpp
$ g++ -c -o stack.o stack.cpp
$ g++ -o main main.o stack.o
main.o: In function `main':
main.cpp:(.text+0xe): undefined reference to 'stack<int>::stack()'
main.cpp:(.text+0x1c): undefined reference to 'stack<int>::~stack()'
collect2: ld returned 1 exit status
make: *** [program] Error 1
Voici mon code:
stack.hpp :
#ifndef _STACK_HPP
#define _STACK_HPP
template <typename Type>
class stack {
public:
stack();
~stack();
};
#endif
stack.cpp :
#include <iostream>
#include "stack.hpp"
template <typename Type> stack<Type>::stack() {
std::cerr << "Hello, stack " << this << "!" << std::endl;
}
template <typename Type> stack<Type>::~stack() {
std::cerr << "Goodbye, stack " << this << "." << std::endl;
}
main.cpp :
#include "stack.hpp"
int main() {
stack<int> s;
return 0;
}
ldest bien sûr correct: les symboles ne sont pas inclus stack.o.
La réponse à cette question n'aide pas, comme je fais déjà ce qu'elle dit.
Celui-ci pourrait aider, mais je ne veux pas déplacer chaque méthode dans le .hppfichier - je ne devrais pas avoir à le faire, n'est-ce pas?
La seule solution raisonnable est-elle de déplacer tout ce qui se trouve dans le .cppfichier vers le .hppfichier, et de tout inclure simplement, plutôt que de créer un lien en tant que fichier objet autonome? Cela semble terriblement moche! Dans ce cas, je pourrais aussi bien revenir à mon état précédent et renommage stack.cppà stack.hppet faire avec elle.