“运营商>>”不匹配在's>>本地“

时间:2011-07-10 05:29:16

标签: c++ compiler-errors operator-keyword

此功能阻止了Wagic:编译的自制软件:

/home/white/Pandora/wagic-read-only/projects/mtg/src/GameOptions.cpp:1156:错误:'s>>中的'运营商>>'不匹配本地”

Source(GameOptions.cpp):http://code.google.com/p/wagic/source/browse/trunk/projects/mtg/src/ GameOptions.cpp 来源(一般): http://code.google.com/p/wagic/source/browse/

(第1142-1172行)

    bool GameOptionKeyBindings::read(string input)
{
istringstream iss(input);
vector<pair<LocalKeySym, JButton> > assoc;

while (iss.good())
{
    stringstream s;
    iss.get(*(s.rdbuf()), ',');
    iss.get();

    LocalKeySym local;
    char sep;
    u32 button;
    s >> local >> sep >> button; 
    if (':' != sep)
        return false;
    assoc.push_back(make_pair(local, u32_to_button(button)));
}

if (assoc.empty())
    return false;

JGE* j = JGE::GetInstance();

j->ClearBindings();
for (vector<pair<LocalKeySym, JButton> >::const_iterator it = assoc.begin(); it != assoc.end(); ++it)
    j->BindKey(it->first, it->second);

return true;
}

我如何重写它以使其编译?

2 个答案:

答案 0 :(得分:2)

s >> local

调用不理解您的自定义类operator >>的默认LocalKeySym因此您需要为自定义类Operator >>重载LocalKeySym

示例代码:

std::istream& operator>>(std::istream& is, LocalKeySym& obj) 
{ 
  // read LocalKeySym obj from stream 

  if( /* no valid object of LocalKeySym found in stream */ )
       is.setstate(std::ios::failbit);

  return is;
}

答案 1 :(得分:1)

operator >>仅针对内置类型定义,例如intfloatchardouble等,并且可以使用输入地址指针。由于您的变量local属于自定义类型LocalKeySym。您可能需要定义自己的operator >>

它应该类似于重载istream和ostream运算符。请参阅tutorial here

相关问题