代码之家  ›  专栏  ›  技术社区  ›  Mike Douglas

我是怎么打破遗产的?

  •  2
  • Mike Douglas  · 技术社区  · 17 年前

    重构 bug_report_view.cc bug_report_view.h 我提取 send_report() , report_phishing() ,一些其他较小的函数和 BugReport::Cleanup 进入之内 bug_report.cc bug_report.h (我的版本)。现在编译,我得到:

    [...]bug_report.cc:196: error: no matching function for call to ‘URLFetcher::URLFetcher(std::wstring&, URLFetcher::RequestType, BugReport::PostCleanup*)’ ../chrome/browser/net/url_fetcher.h:136:

    note: candidates are: URLFetcher::URLFetcher(const URLFetcher&) ../chrome/browser/net/url_fetcher.h:82:

    note: URLFetcher::URLFetcher(const GURL&, URLFetcher::RequestType, URLFetcher::Delegate*)

    出于某种原因, BugReport::PostCleanup (在我的版本中)不被识别为urlfetcher::delegate的子类,但是 BugReportView::PostCleanup (在第一个链接中)是。我在哪里搞砸了?谢谢。

    3 回复  |  直到 17 年前
        1
  •  3
  •   1800 INFORMATION    17 年前

    问题不是PostLeanup类的类型。问题是urlfetcher类构造函数的第一个参数的类型。构造函数需要一个专家,您正在传递一个 std::wstring 打电话 post_url .您需要在两者之间执行某种转换。可能这样做是合适的:

    GURL post_url(l10n_util::GetString(IDS_BUGREPORT_POST_URL));
    URLFetcher* fetcher = new URLFetcher(post_url, URLFetcher::POST,
                                       new BugReport::PostCleanup);
    

    在您修改过的代码中,类有一个在构造函数中初始化的gurl成员,您已经将其更改为仅在该函数中引用的变量,但更改了类型。

        2
  •  0
  •   anon    17 年前

    在:

     URLFetcher* fetcher = new URLFetcher(post_url, URLFetcher::POST,
                                           new BugReport::PostCleanup);
    

    它找不到一个url fetcher构造函数,thzat接受您提供的参数——问题可能出在url-fetcher.h中,您还没有显示它。

    顺便说一句,您的代码中还展示了许多其他的问题和糟糕的实践——最好尽快进行完整的代码审查。

        3
  •  0
  •   bayda    17 年前

    第一个版本使用成员变量post_URL_u2;第二个只是局部变量post_URL。
    请描述什么是gurl类型-它是std::wstring或其他类型上的typedef。