C++ 我是怎么打破遗产的?

C++ 我是怎么打破遗产的?,c++,inheritance,oop,C++,Inheritance,Oop,重构自和,我将send_report()、report_phishing()、其他一些较小的函数和BugReport::Cleanup提取到和(我的版本)中。现在,我得到: […]bug_report.cc:196:错误:调用“URLFetcher::URLFetcher(std::wstring&,URLFetcher::RequestType,BugReport::PostCleanup*)”时没有匹配的函数 ../chrome/browser/net/url\u fetcher.h:136

重构自和,我将
send_report()
report_phishing()
、其他一些较小的函数和
BugReport::Cleanup
提取到和(我的版本)中。现在,我得到:

[…]bug_report.cc:196:错误:调用“URLFetcher::URLFetcher(std::wstring&,URLFetcher::RequestType,BugReport::PostCleanup*)”时没有匹配的函数
../chrome/browser/net/url\u fetcher.h:136:

注意:候选项是:URLFetcher::URLFetcher(consturlfetcher&)
../chrome/browser/net/url\u fetcher.h:82:

注意:URLFetcher::URLFetcher(const GURL&,URLFetcher::RequestType,URLFetcher::Delegate*)

由于某些原因,
BugReport::PostCleanup
(在我的版本中)未被识别为URLFetcher::Delegate的子类,但
BugReportView::PostCleanup
(在第一个链接中)被识别。我在哪里搞砸了?谢谢。

网址:

 URLFetcher* fetcher = new URLFetcher(post_url, URLFetcher::POST,
                                       new BugReport::PostCleanup);
它找不到URLFetcher构造函数,thzat接受您提供给它的参数-问题可能出在url_fetcher.h中,您没有显示它


顺便说一句,您的代码中还存在许多其他问题和错误做法-最好尽快进行完整的代码审查。

问题不是后清理类的类型。问题是URLFetcher类构造函数的第一个参数的类型。构造函数需要一个GURL&您正在传递一个名为
post\u url
std::wstring
。您需要在两者之间执行某种转换。可能类似这样的事情是合适的:

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

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

第一个版本使用了成员变量post\u url,第二个版本仅使用了局部变量post\u url。

请描述什么是GURL类型-它是std::wstring或其他内容上的typedef。

您能把这个问题说清楚一点吗?:-)我的错。链接更新,问题扩展。你能添加你正在构建的编译器和操作系统吗?Mac OS X,使用g++-4.2编译。当然,这就是问题所在,但是BugReport::PostCleanup是URLFetcher::Delegate的一个子类,所以为什么不试试URLFetcher::URLFetcher(const-GURL&,URLFetcher::RequestType,URLFetcher::Delegate*)?哈哈。最后一个参数引起了我的注意,我完全没有注意到。谢谢你的帮助。