#include <bits/stdc++.h>
using namespace std;
class A {
int x;
public:
class B {
public:
int y;
B(int _y) : y(_y) {}
explicit operator A() const {
return A(y);
}
};
explicit A (int _x) : x(_x) {}
explicit A (const A& o) : x(o.x) {}
};
typedef unsigned int size_type;
int main() {
return 0;
}
Error: g++ -Wall -I./ -I/home/abdelrahman/main-repo/ -o "testt" "testt.cpp" (in directory: /home/abdelrahman/Desktop)explicite C++ mot-clé: quel est le problème avec ce code?
testt.cpp: In member function ‘A::B::operator A() const’: testt.cpp:11:14: error: no matching function for call to ‘A::A(A)’ return A(y); ^
Compilation failed.
Déplacer le constructeur pour être avant la classe B? – NathanOliver
Voir cette question par exemple, les constructeurs de copie explicites ont tendance à désavouer le retour en termes de valeur: https://stackoverflow.com/questions/4153527/explicit-copy-constructor-behavior-and-practical-uses –
FYI: Si vous supprimez l'explicite À partir du constructeur de copie, il compile. Maintenant, en regardant pourquoi. –