2016-07-03 34 views
-4

私はChromium Embedded Frameworkを使用しています。私は主な機能に次のものを入れました。エラー: ''はこの関数で初期化されていないことがあります[-Werror = maybe-uninitialized]

CefRefPtr<CefRequest> cef; 

CefRequest::ReferrerPolicy origin = origin; 

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

makeプロセスの間、私は、次のエラーが表示さ:

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

              ^

方法:

仮想ボイドSetReferrer(CONST CefString & REFERRER_URL、 ReferrerPolicyポリシー)= 0。

なぜ原点が初期化されていないのですか?どのように初期化できますか?

おかげ

+0

初期化されていないポインタを逆参照しています。 'CatRequest'は抽象的ですか? – LogicStuff

+2

なぜ初期化されていない変数の使用が問題なのかわからない場合は、テキストブックからC++の基礎を理解する時間を費やす必要があります。はじめに[The Definitive C++ Book Guide and List](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)をご覧ください。 –

+0

はい、LogicStuff、CefRequestは抽象です。私はvirutalとabstractはC++で同じだと思った。どのように私は抽象クラスから私のメインのメソッドをインスタンス化するのですか? – user3202058

答えて

1

それは、エラーが言うだけのようなあなたの変数であるあなたがそれを使用するときに「」初期化されていないされています。変数を宣言しましたが、初期化していません。次に、次の行で変数を間接参照します。これにより、通常はプログラムがクラッシュします。あなたのコンパイラはこれについてあなたに警告しようとしています。

+0

ありがとうございます。しかし、私は新しいなどでそれを初期化するとき:CefRequest * a =新しいCefRequest; 「抽象型CefRequestのオブジェクトを割り当てることができないため、エラーが発生します。」ポインタを使用しても初期化はできません:a-> SetReferrer( "www.google.com"、origin);すべての仮想メソッドを備えた完全抽象クラスです。[リンク] http://magpcss.org/ceforum/apidocs3/projects/%28default%29/cef_request.h.html – user3202058

+0

私はAPIに精通していませんここでは使用していますが、このような抽象クラスは一般的に、派生する基本クラスとして設計されています。直接使用できません。必要なオブジェクトをどのように作成するのかについては、ドキュメンテーションを詳しく調べる必要があります。工場クラスなどがあるかもしれません。このクラスに静的な 'Create()'関数があることがわかりました。それを呼び出すことで、サブクラス化されたオブジェクトを返すことができます。ここでは、ドキュメントを読む必要があります。 –

関連する問題