Bonjour,
Voici un morceau de code qui compilait bien avec gcc c++ 4.0.1 et qui ne
compile pas avec la version 4.3.0. Il y a plusieurs fichiers.
Le message d'erreur que je reçois quand je compile avec c++ 4.3.0 est:
Si quelqu'un pouvait m'expliquer pourquoi parce que je ne comprends pas ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 obj.cpp:3: erreur: specialization of 'impl<T>::impl() [with T = objimpl]' after instantiation obj.cpp:4: erreur: specialization of 'impl<T>::~impl() [with T = objimpl]' after instantiation
Merci
Michel
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // impl.h template <class T> struct impl { T* pimpl; impl(); ~impl(); };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 // objimpl.h #include <iostream> class objimpl { public: objimpl(){}; void print(int n){std::cout<<"n: "<<n<<"\n";} };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // obj.h #include "impl.h" class objimpl; class obj : private impl<objimpl> { public: int _n; obj(int n):_n(n){}; void print(); };
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // obj.cpp #include "objimpl.h" #include "obj.h" template <> impl<objimpl>::impl() : pimpl(new objimpl()) {}; template <> impl<objimpl>::~impl() {delete pimpl;} void obj::print(){pimpl->print(_n);}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 // main.cpp #include "obj.h" int main() { obj obj_test(1); obj_test.print(); }
Partager