Considerate le seguenti due firme del costruttore, dovrebbe essere possibile costruire un Couple
con Couple("George", "Nora")
? Il mio compilatore si lamenta dell'errore mostrato di seguito. Se lo chiamo con Couple(std::string("George"), std::string("Nora"))
, compila OK. Immagino che ci sia un problema con il casting implicito che mi sorprende dato che sebbene char * to string andrebbe bene.È valido avere due cast impliciti nella costruzione di un oggetto in C++?
class Person
{
public:
Person(const std::string& name);
};
class Couple
{
public:
Coordinate(const Person& p1, const Person& p2, const Optional<Person>& = Optional<Person>());
};
TestCouple.cpp:69: error: no matching function for call to `Couple::Couple(const char[7], const char[5])'
TestCouple.h:24: note: candidates are: Couple::Couple(const Person&, const Person&, const Optional<fox::Person>&)
Non vedo il problema, dovrebbe funzionare. Dovresti pubblicare il test minimale completo. – Klaim
È 'Coordinate' un errore di battitura? Non dovrebbe invece essere "coppia"? – Nawaz
Non esiste un "cast implicito" in C++. I cast sono richieste di conversione esplicite, utilizzando una sintassi di cast speciale. Quello che cerchi sono le conversioni implicite. – PlasmaHH