(novice) problème avec le compilateur gcc quand je passe de c++-4.0.1 vers c++-4.2.4
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:
Citation:
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
Le code:
Code:
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";
} |
Code:
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.
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