Biorąc pod uwagę następujące dwa sygnatury konstruktora, czy powinno być możliwe zbudowanie Couple
z Couple("George", "Nora")
? Mój kompilator uskarża się z błędem pokazanym poniżej. Jeśli zadzwonię pod numer Couple(std::string("George"), std::string("Nora"))
, kompiluje się OK. Zgaduję, że istnieje pewien problem z niejawnym castingiem, który zaskakuje mnie, ponieważ chciałem, żeby char * na string był w porządku.Czy poprawne jest posiadanie dwóch niejawnych rzutów podczas konstruowania obiektu w 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>&)
Nie widzę problemu, powinien działać. Powinieneś opublikować pełny minimalny test. – Klaim
Czy "Coordinate" to literówka? Czy nie powinien to być "Para"? – Nawaz
Nie ma czegoś takiego jak "niejawna obsada" w C++. Przesłania to jawne prośby o konwersję przy użyciu specjalnej składni rzutowania. To, czego szukasz, to niejawne konwersje. – PlasmaHH