关于warning C4239的问题【必加分!】

blackpool 2007-09-11 03:47:31
写了一段代码如下:

protected:
bool OpenTestReport(wxString & sReportName=wxString());

出现如下warning:

warning C4239: nonstandard extension used : 'default argument' : conversion from 'class wxString' to 'class wxString &'

A reference that is not to 'const' cannot be bound to a non-lvalue

请问怎么解决,谢谢!
...全文
373 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackpool 2007-09-11
  • 打赏
  • 举报
回复
问题解决了 果然如taodm老大和各位所说! 谢谢了!
blackpool 2007-09-11
  • 打赏
  • 举报
回复
好的 我明天试试看吧 怎么服务器突然坏掉 代码都看不到了: (

谢谢各位了!

我会加分的:)
taodm 2007-09-11
  • 打赏
  • 举报
回复
汗!
你的修改发生在一个“临时变量”身上,函数调用结束后,“修改”就自动丢失了,能有意义么?
你不会在调用者那儿先声明一个局部变量,再用这个局部变量调用这个函数么。
blackpool 2007-09-11
  • 打赏
  • 举报
回复
不提供默认参数不行,试过了,如果不提供的话每次load完一次report之后就再也无法load其他report了

有没有其他办法提供一个默认参数的
taodm 2007-09-11
  • 打赏
  • 举报
回复
那就不要提供默认参数
blackpool 2007-09-11
  • 打赏
  • 举报
回复
可是我需要在随后的代码中修改 sReprotName 也不能让它为const

如下:
bool TesterGUI::OpenTestReport( const wxString & sReportName)
{
// Open new report
if(sReportName.IsEmpty())
{
sReportName=wxFileSelector(_("Open report"),
m_sReportName.Left(m_sReportName.Find(PATH_BIAS_C,TRUE)),
m_sReportName.Right(m_sReportName.Length()-sReportName.Find(PATH_BIAS_C,TRUE)-1),
_("xml"),_("*.xml"),
wxOPEN|wxFILE_MUST_EXIST,this); // Will get an error here if const used
if(sReportName.IsEmpty())
return false;
}
}
nevergone 2007-09-11
  • 打赏
  • 举报
回复
临时变量不能绑定到普通的引用中
要用const 引用

bool OpenTestReport( const wxString & sReportName = wxString() );
ouyh12345 2007-09-11
  • 打赏
  • 举报
回复
所谓的默认参数,就是在编译连接时,编译器就知道了参数的值。
而wxString(),是调用某个函数吧,它的返回值在运行时才知道,当然不行了。

64,691

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧