Bonjour,
Voilà un petit code que je peux compiler avec c++4.0.1 de gcc mais pas avec la version
c++-4.2.4 (que je viens d'installer ...).
Avec cette dernière version j'ai le message d'erreur suivant:
Le code:test_namespace.cpp:15: erreur: specialization of 'T my_namespace::my_struct<T>::get_val() [with T = double]' in different namespace
test_namespace.cpp:15: erreur: from definition of 'T my_namespace::my_struct<T>::get_val() [with T = double]'
test_namespace.cpp:16: erreur: specialization of 'T my_namespace::my_struct<T>::get_val() [with T = float]' in different namespace
test_namespace.cpp:16: erreur: from definition of 'T my_namespace::my_struct<T>::get_val() [with T = float]'
test_namespace.cpp:18: erreur: specialization of 'void my_namespace::my_struct<T>::set_val(T) [with T = double]' in different namespace
test_namespace.cpp:18: erreur: from definition of 'void my_namespace::my_struct<T>::set_val(T) [with T = double]'
test_namespace.cpp:19: erreur: specialization of 'void my_namespace::my_struct<T>::set_val(T) [with T = float]' in different namespace
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include <iostream> namespace my_namespace { template <class T> struct my_struct { public: T val; T get_val(); void set_val(T x); }; } template<> double my_namespace::my_struct<double>::get_val(){return val;} template<> float my_namespace::my_struct<float>::get_val() {return val;} template<> void my_namespace::my_struct<double>::set_val(double x){ val=x;} template<> void my_namespace::my_struct<float>::set_val(float x) { val=x;} int main() { my_namespace::my_struct<double> toto; toto.set_val(10.); std::cout << toto.get_val() << "\n"; }Je ne suis pas assez bon pour comprendre ce qui se passe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #include <iostream> namespace my_namespace { template <class T> struct my_struct { public: T val; T get_val(); void set_val(T x); }; } template<> double my_namespace::my_struct<double>::get_val(){return val;} template<> float my_namespace::my_struct<float>::get_val() {return val;} template<> void my_namespace::my_struct<double>::set_val(double x){ val=x;} template<> void my_namespace::my_struct<float>::set_val(float x) { val=x;} int main() { my_namespace::my_struct<double> toto; toto.set_val(10.); std::cout << toto.get_val() << "\n"; }
Ce que j'ai remarqué c'est que ca marche avec la version 4.2.4 du compilateur si
je fais les spécialisations dans "namespace my_namespace{ ... }.
Si quelqu'un pouvait m'aider ?
Merci.
Cordialement,
Michel
Message edite par Aurelien, merci d'utiliser les balises CODE et QUOTE
Partager