2009-12-30 3 views
0

Je suis en train de recompiler du code ancien dans la dernière version de Visual Studio (2008) et le code qui fonctionnait précédemment ne peut pas être compilé. Un des problèmes est dû à des opérateurs surchargés pour ma classe. ci-dessous il y a une classe simplifiée pour démontrer le problème. Si j'enlève les opérateurs de casting pour int et char * alors ça marche bien. Donc l'un des moyens de résoudre mon problème est de les remplacer par les procédures to_char et to_int et de les utiliser à la place, mais cela nécessitera beaucoup de changements dans le code (cette classe est fortement utilisée). Il doit y avoir une meilleure façon plus intelligente de le réparer. toute aide est grandement appréciée :-)constructeurs de copie ambiguë vc 2008

class test 
{ 
public: 
    test(); 
    test(char* s2); 
    test(int num); 
    test(test &source); 

    ~test(); 

    operator char*(); 
    operator int(); 

}; 

test::test() {  
} 

test::test(char* s2) { 
} 

test::test(int num) { 
} 

test::test(test &source) { 
} 



test::operator char*() { 
} 

test::operator int() { 
} 

test test_proc() { 
    test aa; 
    return aa; 
} 

int test_proc2(test aa) 
{ 

return 0; 
} 

int main() 
{ 
    test_proc2(test_proc()); 
} 


//test.cpp(60) : error C2664: 'test_proc2' : cannot convert parameter 1 from 'test' to 'test' 
//  Cannot copy construct class 'test' due to ambiguous copy constructors or no available copy constructor 

Répondre

5

Essayez de changer

test(test &source); 

à

test(const test &source); 

Le problème est que l'appel test_proc retourne un objet de test temporaire, qui peut être transmis à une fonction qui accepte une référence const, mais pas une référence simple.

+0

merci beaucoup! une solution aussi simple. tu as sauvé ma journée :-) –

Questions connexes