2016-05-18 15 views
0

Beim Kompilieren einer 3rd-Party-Bibliothek, bekomme ich "Fehler: Anfangswert der Referenz auf nicht-const muss ein Lvalue sein". Der Fehler wird auftreten, in einer C++ Klassendefinition in dieser Deklaration einer Elementfunktion:Fix 3rd Party Library Code Initialisierung einer Klassenmember Funktion Referenz Parameter mit einer Konstante

bool intersectsHierarchy(ON_Ray& ray, std::list<BVNode<ON_BoundingBox>*>& results = 0); 

Basierend auf Informationen, die ich im Internet gefunden, ich versuchte, den initialisierten Parameter sein const zu machen, wie folgt:

bool intersectsHierarchy(ON_Ray& ray, const std::list<BVNode<ON_BoundingBox>*>& results = 0); 

Aber das verursacht nur einen anderen Kompilierungsfehler.

Irgendwelche Ideen, wie Sie das am besten beheben und meine Bibliothek kompilieren können?

+0

Sie sich von der '= 0 'befreien Teil im ersten Beispiel? Ist das dein Code oder jemand anderes? – NathanOliver

+0

Dies ist der Bibliothekscode von Drittanbietern, also von jemand anderem. Ich bin besorgt, wenn ich den Initialisierungswert 0 los werde, werde ich einen Fehler erstellen. –

+2

'0' und' std :: list *> 'sind verschiedene Typen, und letzterer ist nicht von ersteren konstruierbar (außer wenn * explizit * ein kompatibler c'tor aufgerufen wird). Dies ist ein Fehler, den kein kompilierbarer Compiler sowieso übersetzen sollte. – IInspectable

Antwort

-1

entfernen Sie den = 0 Teil -

  1. Sie nicht 0 zu einer Liste zuweisen können
  2. Sie können nur eine Variable als Verweis übergeben kein const Wert
+0

* "Sie können eine Variable nur durch Verweis nicht einen konstanten Wert übergeben" * - Sie können sehr gut eine Referenz an eine binden Integer-Literal. Sie können eine Lvalue-Referenz nicht an eine Konstante binden, aber es spielt keine Rolle, ob diese Konstante ein Integer-Literal oder eine Const-Variable ist. – IInspectable