2009-02-05 2 views
1

Je suis très occupé maintenant écrire le débogage du code, je ne peux pas COOKUP un exemple complet, mais décrit essentiellement mon problèmePourquoi GCC considère-t-il les constructeurs privés lors de la correspondance de fonctions?

class Base{}; 
class MyX:public Base 
{ 
    ... 
}; 
class Derived:Base 
{ 
    ... 
}; 
template<class X> 
class MyClass:Derived 
{ 
private: 
    MyClass(const MyClass&) 
    :x() 
    {} 
public: 
    MyClass(const X& value) 
    :x(value) 
    {} 
}; 

.... 
MyX  x; 
MyClass<MyX>(x); 

Cela me donne une erreur comme ceci:

error: there are two possible constrcutors MyClass<X>(const MyClass<X>&) and MyClass<X>(const X&) 
+0

MyX ne tire de MyClass? –

+0

Pas directement, mais comme ma mise à jour montre qu'ils partagent un ancêtre –

Répondre

6
MyClass<MyX>(x); 

est analysé comme

MyClass<MyX> x; 

Mais MyClass<MyX> n'a pas de constructeur par défaut. Essayez de donner un nom:

MyClass<MyX> p(x); 
0

Je crains que vous ne deviez nous donner un exemple de code plus complet. Par exemple, dans le constructeur MyClass (const X &), vous initialisez "x" avec "x"?

MyClass(const& X value) 
    :x(x) 
+0

qui était une faute de frappe, aurait dû être la valeur –

Questions connexes