Problème de compilation avec gcc c++ 4.3.0 (2)
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:
Code:
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 |
Si quelqu'un pouvait m'expliquer pourquoi parce que je ne comprends pas ...
Merci
Michel
Code:
1 2 3 4 5 6 7 8
|
// impl.h
template <class T> struct impl
{
T* pimpl;
impl();
~impl();
}; |
Code:
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:
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:
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:
1 2 3 4 5 6 7 8
|
// main.cpp
#include "obj.h"
int main()
{
obj obj_test(1);
obj_test.print();
} |