【问题标题】:error: ‘ ’ may be used uninitialized in this function [-Werror=maybe-uninitialized]错误:“ ”可能在此函数中未初始化 [-Werror=maybe-uninitialized]
【发布时间】:2016-07-03 20:01:07
【问题描述】:

我正在使用 Chromium 嵌入式框架。我将以下内容放在 main 函数中。

CefRefPtr<CefRequest> cef;

CefRequest::ReferrerPolicy origin = origin;

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

在制作过程中,我收到以下错误:

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

                                            ^

方法:

virtual void SetReferrer(const CefString&referrer_url, ReferrerPolicy 政策) =0;

为什么 origin 没有被初始化,我该如何初始化它?

谢谢

【问题讨论】:

  • 您正在取消引用一个未初始化的指针。你的意思是CatRequest 是抽象的?
  • 如果您不知道为什么使用未初始化的变量是个问题,您应该花时间从教科书中了解 C++ 的基础知识。看看The Definitive C++ Book Guide and List 开始吧。
  • 是的,LogicStuff,CefRequest 是抽象的。我认为虚拟和抽象在 C++ 中是相同的。如何从抽象类实例化 main 中的方法?

标签: c++ linux chromium-embedded


【解决方案1】:

就像错误所说的那样,您的变量“a”在使用时未初始化。您已经声明了变量,但尚未对其进行初始化。然后在下一行中取消引用该变量。这通常会导致您的程序崩溃。您的编译器正试图警告您这一点。

【讨论】:

  • 谢谢。但是,当我用new初始化它时,例如: CefRequest *a = new CefRequest;我收到一个错误,因为“无法分配抽象类型 CefRequest 的对象”。使用指针也不允许初始化: a->SetReferrer("www.google.com",origin );它是一个包含所有虚方法的完全抽象类:[link] magpcss.org/ceforum/apidocs3/projects/%28default%29/…
  • 我不熟悉您在这里使用的 API,但是像这样的抽象类通常被设计为要派生的基类 - 它不应该/不能直接使用。您将需要更详细地查看文档,以了解您应该如何创建所需的对象。可能有工厂类什么的。我注意到这个类中有一个静态的Create() 函数。调用它可能会返回一个您可以使用的子类对象 - 只是在这里猜测 - 您需要阅读文档。
猜你喜欢
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 2013-12-29
相关资源
最近更新 更多