0
我收到了一些奇怪的錯誤,我希望得到一些幫助。下面的代碼:運算符()缺少參數列表
Obs.h:
class Obs;
struct Try : public std::pair<Item&, std::pair<int, int> > {
Item& item() const;
int dx() const;
int dy() const;
Try(Item& i, int _dx, int _dy);
};
struct Pred : public std::binary_function<Obs, Try, bool> {
bool operator() (Obs& o, Try& m) const;
};
class Obs {
Rect position;
public:
Obs (Rect dimensions);
bool Allows (Item i, int dx, int dy) const;
};
Obs.cpp:
Try::Try (Item& i, int _dx, int _dy) {
first = i;
second.first = _dx;
second.second = _dy;
}
bool Obs::Allows (Item i, int dx, int dy) const {
//
}
bool Pred::operator()(Obs& o, Try& m) const {
return !o.Allows(m.item(), m.dx(), m.dy());
}
Item& Try::item() const {
return first;
}
int Try::dx() const {
return second.first;
}
int Try::dy() const {
return second.second;
}
ObsHolder.h:
class ObsHolder {
std::list< Obs* > list;
public:
void AddObstacle (Obs* obs);
bool CanMove (Item& i, int dx, int dy);
};
ObsHolder.cpp:
bool ObsHolder::CanMove (Item& i, int dx, int dy) {
return std::find_if(list.begin(), list.end(), std::bind2nd(Pred::operator(), Try(i, dx, dy))) == list.end();
}
我得到的主要錯誤是:
'Pred :: operator()':函數調用缺少參數列表;使用 '&潑尼鬆::運算符()' 創建一個指向成員
我也得到:
C:\ Program Files文件(x86)的\微軟的Visual Studio 11.0 \ VC \包括\實用程序(85):錯誤C2440:初始化:不能從 '詮釋' 轉換成 '項目&'
而下"*my_path*\microsoft visual studio 11.0\vc\include\utility(83)" complaining about std::pair
它拼寫出來! 'use'&Pred :: operator()'創建一個指向成員的指針' – sehe
@sehe即使這樣拼寫出來,這也行不通。 'bind2nd'不會將成員指針指向參數。 – pmr
從編譯器錯誤中修剪諸如文件名和行號等有趣的東西,一點也不幫助。 – DevSolar