这个好诡异...能算是gcc缺陷么
c++吧
全部回复
仅看楼主
level 12
v2abcd 楼主
这样写:spNextOutputer->put(note+turnLevel);//note.operator+()返回的是Note对象
出现这样的错= =
/*******************Error Info**********************/
g++ -std=c++11 -o LuCor LuCor.cpp -lboost_program_options -lboost_system -L/usr/lib
In file included from LuCor.cpp:8:0:
Turnner.hpp: In member function ‘virtual int Ly::Tunner::put(Ly::Token&)’:
Turnner.hpp:31:44: error: no matching function for call to ‘Ly::TokenOutputer::put(Ly::Note)’
Turnner.hpp:31:44: note: candidates are:
In file included from TokenHead.h:6:0,
from Note.hpp:2,
from BDInputer2.hpp:4,
from LuCor.cpp:2:
TokenOutputer.hpp:18:14: note: virtual int Ly::TokenOutputer::put(Ly::Token&)
TokenOutputer.hpp:18:14: note: no known conversion for argument 1 from ‘Ly::Note’ to ‘Ly::Token&’
TokenOutputer.hpp:19:6: note: int Ly::TokenOutputer::put(Ly::Token::Ptr)
TokenOutputer.hpp:19:6: note: no known conversion for argument 1 from ‘Ly::Note’ to ‘Ly::Token::Ptr {aka std::shared_ptr<Ly::Token>}’
make: *** [../bin/LuCor] Error 1
/*******************Error Info**********************/
然后这样就对了
Note newNote = note+turnLevel;
spNextOutputer->put(newNote);
到底发生了什么?msvc这段是没问题的。

2012年09月21日 03点09分 1
level 12
表示不解,回去试试。
2012年09月21日 03点09分 2
level 12
你确定你的operator+的重载没问题?
2012年09月21日 03点09分 3
是因为你的put调用了一个临时对象的引用?
2012年09月21日 03点09分
爪机目测是这个原因,你把put的参数改成const引用估计就没这回事了。
2012年09月21日 03点09分
回复 NEMESIS_T2 :不说了msvc这没问题么= =我看是gcc的问题。改个const牵动上下好多类,费劲啊
2012年09月21日 06点09分
回复 v2abcd :msvc不见得就支持标准说,标准上确实是不能直接引用临时对象的。
2012年09月21日 06点09分
level 7
Ly::TokenOutputer::put(Ly::Token&)
改成
Ly::TokenOutputer::put(const Ly::Token&)
需要的话还可以加一个
Ly::TokenOutputer::put(Ly::Token&&)
2012年09月21日 03点09分 4
level 12
v2abcd 楼主
取巧了一下= =基类加了个函数
int put(const Token& _token){return put(const_cast<Token&>(_token));}
坏方法,大家不要学
2012年09月21日 06点09分 5
[瀑布汗~]
2012年09月21日 07点09分
1