2016-07-03 22 views
-4

Ich arbeite mit Chromium Embedded Framework. Ich füge folgendes in die Hauptfunktion ein.Fehler: '' kann in dieser Funktion nicht initialisiert werden [-Werror = vielleicht nicht initialisiert]

CefRefPtr<CefRequest> cef; 

CefRequest::ReferrerPolicy origin = origin; 

cef->SetReferrer("www.google.com",origin); 

Während des make-Prozess ich folgende Fehlermeldungen an:

error: ‘origin’ may be used uninitialized in this function [-Werror=maybe-uninitialized] 
    cef->SetReferrer("www.google.com",origin); 

              ^

die Methode:

virtual void SetReferrer (const CefString & REFERRER_URL, ReferrerPolicy Politik) = 0;

Warum wird Ursprung nicht initialisiert und wie kann ich initialisieren?

Dank

+0

Sie dereferenzieren einen nicht initialisierten Zeiger. Du meinst "CatRequest" ist abstrakt? – LogicStuff

+2

Wenn Sie nicht wissen, warum die Verwendung nicht initialisierter Variablen ein Problem darstellt, sollten Sie sich die Zeit nehmen, die Grundlagen von C++ aus einem Lehrbuch zu lesen. Werfen Sie einen Blick auf [The Definitive C++ Book Guide und Liste] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list), um loszulegen. –

+0

Ja, LogicStuff, CefRequest ist abstrakt. Ich dachte, virutal und abstrakt wären in C++ gleich. Wie instanziiere ich eine Methode in meinem main aus einer abstrakten Klasse? – user3202058

Antwort

1

Es ist genau wie der Fehler sagt, Ihre Variable ‚a‘ uninitialised, wenn Sie es verwenden. Sie haben die Variable deklariert, aber Sie haben sie nicht initialisiert. Dann dereferenziere in der nächsten Zeile die Variable. Dies führt normalerweise dazu, dass Ihr Programm abstürzt. Ihr Compiler versucht Sie davor zu warnen.

+0

Danke. Wenn ich es jedoch mit new initialisiere, zB: CefRequest * a = new CefRequest; Ich bekomme einen Fehler, weil "ein Objekt vom abstrakten Typ CefRequest nicht zugeordnet werden kann." Die Verwendung eines Zeigers erlaubt keine Initialisierung: a-> SetReferrer ("www.google.com", Ursprung); Es ist eine komplett abstrakte Klasse mit allen virtuellen Methoden: [link] http://magpcss.org/ceforum/apidocs3/projects/%28default%29/cef_request.h.html – user3202058

+0

Ich bin nicht vertraut mit der API du bist Verwenden Sie hier, aber eine abstrakte Klasse wie diese ist in der Regel als eine Basisklasse aus abgeleitet werden - es sollte nicht/kann nicht direkt verwendet werden. Sie müssen sich die Dokumentation genauer anschauen, um zu sehen, wie Sie das gewünschte Objekt erstellen sollen. Es kann eine Fabrikklasse oder etwas geben. Ich bemerke, dass es eine statische 'Create()' Funktion in dieser Klasse gibt. Wenn Sie ein unterklassifiziertes Objekt aufrufen, das Sie verwenden können - Sie müssen nur hier raten -, müssen Sie die Dokumente lesen. –