Mein C++ - Compiler ist C++ 14
. Ich habe eine Funktion, die ein Objekt einer benutzerdefinierten Klasse einbezieht, die alle Arten von Fehlercodes einkapselt. Dieser Parameter wird als Referenz übergeben. Das benutzerdefinierte Klassenobjekt wird manchmal mit einem gültigen Fehlerwert & gefüllt, manchmal kann es leer sein. Ich habe eine nette neue Sache in C++ 14 gefunden, die std::experimental::optional ist. Jetzt versuche ich dies für meinen Parameter zu verwenden, da es wirklich ein optional
Parameter ist.Verwendung von std :: experimental :: optional als Parameter als Referenz
Nach meiner Funktion Unterschrift mit std :: ist experimentell :: optional, dass ich zu verwenden, versuchen:
MyFunction(some param, std::experimental::optional<MyCustomErrorClass> & error_code) {
//some logic
//sometimes error_code is populated & sometimes not populated
}
Es folgt, wie ich rufe MyFunction
:
MyCustomErrorClass error_code_object;
MyFunction(some_param, error_code_object);
Ich erhalte jedoch den folgenden Compilerfehler:
error: non-const lvalue reference to type 'std::experimental::optional< MyCustomErrorClass>' cannot bind to a value of unrelated type 'MyCustomErrorClass' MyFunction(some_param, error_code_object);
Ich habe versucht, eine Menge zu suchen. Die meisten der Anwendungsbeispiele std::experimental::optional
oder std::optional
demonstrieren es als Rückgabewert von Funktionen.
Was ist los mit meiner Verwendung von std :: experimental :: optional?
_Warum wird 'error_code' von einer nichtkonstanten Referenz übergeben? Wenn es nur ein Eingabeparameter ist, übergeben Sie es mit const-ref genauso wie mit jedem anderen Parameter ... – ildjarn
C++ 14 ist ein Standard. Bitte verwenden Sie bei der Beschreibung Ihres Compilers den Namen, die Versionsnummer und die Plattform. –
@LightnessRacesinOrbit Tut mir leid. Mein Code ist in den Fenstern clang, gcc und microsoft kompiliert. alle 3. –