我是如何打破继承的?

时间:2009-04-06 23:02:45

标签: c++ inheritance oop

bug_report_view.ccbug_report_view.h重构,我将send_report()report_phishing(),其他一些小函数和BugReport::Cleanup解压缩为bug_report.cc和{ {3}}(我的版本)。现在编译,我得到:

  

[...]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 个答案:

答案 0 :(得分:3)

问题不在于PostCleanup类的类型。问题是URLFetcher类构造函数的第一个参数的类型。构造函数需要GURL&,您传递的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成员,它在构造函数中初始化,您已将其更改为仅在该函数中引用的变量,但更改了类型。

答案 1 :(得分:0)

目前:

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

它无法找到一个URLFetcher构造函数thzat接受你给它的参数 - 问题可能在url_fetcher.h中,你没有显示。

顺便说一下,你的代码中还有很多其他问题和不良做法 - 尽快发起完整的代码审查是一个好主意。

答案 2 :(得分:0)

第一个版本使用成员变量post_url_ second只是局部变量post_url 请描述什么是GURL类型 - 它是std :: wstring上的typedef或其他类型。