Also, denkt es, dass {{1}, {1}} - ist 'Matrix' Objekt, aber wie?
In Ihrem Beispielcode
matrix mat({{1},{1}});
Sie ausdrücklich gesagt die Compiler zu versuchen, und dass die Expression zu einem matrix
Konstruktor zu entsprechen.
Es "denkt" nicht den Ausdruck {{1},{1}}
ist eine Matrix, es versucht, es in eins zu machen, weil Sie es gebeten haben.
Was, warum Sie den Fehler (was nicht, was Sie ist gefragt, aber scheint erwähnenswert), dann ist es, weil
vector<double> v{1};
eine gültige Erklärung eines Vektors mit einem einzigen Wert (1.0), und so
vector<vector<double>> vv{{1},{1}};
ist auch eine gültige Erklärung eines Vektors enthält zwei Elementvektoren, die jeweils mit einem einzigen double
Element Wert 1,0, und so schließlich
mat{{{1},{1}}};
wäre ein gültige Übereinstimmung für den Vektorkonstruktor. Da diese Umwandlung implizit erlaubt ist, sind wir
mat m({{1},{1}});
als
mat m(mat{{{1},{1}}});
und damit die Mehrdeutigkeit zu umschreiben erlaubt. Beachten Sie die runden und geschweiften Klammern sorgfältig.
können Sie entweder der Konstruktor implizit machen, oder einfach nur zu einheitlicher Initialisierung Stil gewöhnen und
mat m{{{1},{1}}};
an erster Stelle schreiben.
@AnT, ja, weil ich Vektor der Vektoren habe. Ich kann sogar {{1,2,3}, {1,2}, {1}} eingeben und es wird kompiliert. –
@AnT, ja, mein Fehler, danke. –
'{1}' ist ein 'Vektor', '{{1}, {1}}' ist 'std :: vector >'. Wenn Sie den ersten Konstruktor entfernen, sollte der Code trotzdem kompiliert werden. –