C++ 使用成员函数重载布尔运算符
我有一门课是这样的:C++ 使用成员函数重载布尔运算符,c++,function,struct,operator-overloading,non-static,C++,Function,Struct,Operator Overloading,Non Static,我有一门课是这样的: class AI { private: struct Comparator { bool operator()(const Town* lfs, const Town* rhs) { return GetHeuristicCost(lfs) > GetHeuristicCost(rhs); }
class AI
{
private:
struct Comparator
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) > GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town);
// constructor and variables
};
struct Comparator1
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) > GetHeuristicCost(rhs);
}
};
struct Comparator2
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) + GetTotalCost (lfs, rhs) > GetHeuristicCost(rhs) + GetTotalCost (lfs, rhs);
}
};
GetHeuristicCost
将启发式从town参数返回到路径的exit
我试图做的是重载优先级队列的bool操作符,但它给了我一个错误
a nonstatic member reference must be relative to a specific object
我知道它为什么会给我这个错误,但我不知道的是如何在比较器
结构中使用非静态函数
GetHeuristicCost
必须是非静态的GetHeuristicCost
移动到Town
类中,但没有成功()
上使用两个不同的bool重载,用于两种不同的情况,但参数相同(两个镇)。换句话说,我需要结构,所以我不能这样做:
布尔运算符()(常数镇*lfs,常数镇*rhs)
{
返回GetHeuristicCost(lfs)>GetHeuristicCost(rhs);
} class AI
{
private:
struct Comparator
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) > GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town);
// constructor and variables
};
struct Comparator1
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) > GetHeuristicCost(rhs);
}
};
struct Comparator2
{
bool operator()(const Town* lfs, const Town* rhs)
{
return GetHeuristicCost(lfs) + GetTotalCost (lfs, rhs) > GetHeuristicCost(rhs) + GetTotalCost (lfs, rhs);
}
};
您需要使用指向其“外部”类实例的指针/引用来构造Comparator嵌套类的实例
class AI
{
private:
struct Comparator
{
const AI &outer;
Comparator(const AI &o):outer(o){}
bool operator()(const Town* lfs, const Town* rhs)const
{
return outer.GetHeuristicCost(lfs) > outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town)const;
};
// how to use in code:
AI::Comparator comp(*this);
priority_queue<Town*, vector<Town*>, AI::Comparator> priorityQueue(comp);
AI类
{
私人:
结构比较器
{
康斯特艾和外;
比较器(常数AI&o):外部(o){}
布尔运算符()(常数镇*lfs,常数镇*rhs)常数
{
返回outer.GetHeuristicCost(lfs)>outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(施工镇*施工镇)施工;
};
//如何在代码中使用:
AI::比较器组件(*本);
优先级队列优先队列(comp);
您需要使用指向其“外部”类实例的指针/引用来构造Comparator嵌套类的实例
class AI
{
private:
struct Comparator
{
const AI &outer;
Comparator(const AI &o):outer(o){}
bool operator()(const Town* lfs, const Town* rhs)const
{
return outer.GetHeuristicCost(lfs) > outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town)const;
};
// how to use in code:
AI::Comparator comp(*this);
priority_queue<Town*, vector<Town*>, AI::Comparator> priorityQueue(comp);
AI类
{
私人:
结构比较器
{
康斯特艾和外;
比较器(常数AI&o):外部(o){}
布尔运算符()(常数镇*lfs,常数镇*rhs)常数
{
返回outer.GetHeuristicCost(lfs)>outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(施工镇*施工镇)施工;
};
//如何在代码中使用:
AI::比较器组件(*本);
优先级队列优先队列(comp);
您需要使用指向其“外部”类实例的指针/引用来构造Comparator嵌套类的实例
class AI
{
private:
struct Comparator
{
const AI &outer;
Comparator(const AI &o):outer(o){}
bool operator()(const Town* lfs, const Town* rhs)const
{
return outer.GetHeuristicCost(lfs) > outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town)const;
};
// how to use in code:
AI::Comparator comp(*this);
priority_queue<Town*, vector<Town*>, AI::Comparator> priorityQueue(comp);
AI类
{
私人:
结构比较器
{
康斯特艾和外;
比较器(常数AI&o):外部(o){}
布尔运算符()(常数镇*lfs,常数镇*rhs)常数
{
返回outer.GetHeuristicCost(lfs)>outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(施工镇*施工镇)施工;
};
//如何在代码中使用:
AI::比较器组件(*本);
优先级队列优先队列(comp);
您需要使用指向其“外部”类实例的指针/引用来构造Comparator嵌套类的实例
class AI
{
private:
struct Comparator
{
const AI &outer;
Comparator(const AI &o):outer(o){}
bool operator()(const Town* lfs, const Town* rhs)const
{
return outer.GetHeuristicCost(lfs) > outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(const Town* town)const;
};
// how to use in code:
AI::Comparator comp(*this);
priority_queue<Town*, vector<Town*>, AI::Comparator> priorityQueue(comp);
AI类
{
私人:
结构比较器
{
康斯特艾和外;
比较器(常数AI&o):外部(o){}
布尔运算符()(常数镇*lfs,常数镇*rhs)常数
{
返回outer.GetHeuristicCost(lfs)>outer.GetHeuristicCost(rhs);
}
};
int GetHeuristicCost(施工镇*施工镇)施工;
};
//如何在代码中使用:
AI::比较器组件(*本);
优先级队列优先队列(comp);
我尝试在我的一个函数中使用它,比如Comparator(*this)代码>优先级队列优先级队列
但是它给了我一个错误,comp不是一个类型namepriority\u queuepriorityQueueI尝试过,但它不喜欢我没有创建Comparator实例的事实。它给我的错误是不存在默认构造函数。我也不知道这是否重要,但我从AI&outer
和AI&o
中删除了const
,因为我的AI对象不断变化。请参阅我的编辑。当然你的人工智能会不断变化,但是GetHueristicCost真的会修改它吗?如果您正在执行类似于*的操作,那么它可能是一个只读操作。我尝试在我的一个函数中使用它,例如Comparator comp(*this)代码>优先级队列优先级队列
但是它给了我一个错误,comp不是一个类型namepriority\u queuepriorityQueueI尝试过,但它不喜欢我没有创建Comparator实例的事实。它给我的错误是不存在默认构造函数。我也不知道这是否重要,但我从AI&outer
和AI&o
中删除了const
,因为我的AI对象不断变化。请参阅我的编辑。当然你的人工智能会不断变化,但是GetHueristicCost真的会修改它吗?如果您正在执行类似于*的操作,那么它可能是一个只读操作。我尝试在我的一个函数中使用它,例如Comparator comp(*this)代码>优先级队列优先级队列
但是它给了我一个错误,comp不是一个类型namepriority\u queuepriorityQueueI尝试过,但它不喜欢我没有创建Comparator实例的事实。它给我的错误是不存在默认构造函数。我也不知道这是否重要,但我从AI&outer
和AI&o
中删除了const
,因为我的AI对象不断变化。请参阅我的编辑。当然你的人工智能会不断变化,但是GetHueristicCost真的会修改它吗?如果您正在执行类似于*的操作,那么它可能是一个只读操作。我尝试在我的一个函数中使用它,例如Comparator comp(*this)代码>优先级队列优先级队列
但是它给了我一个错误,comp不是一个类型namepriority\u queuepriorityQueueI尝试过,但它不喜欢我没有创建Comparator实例的事实。它给我的错误是不存在默认构造函数。我也不知道这是否重要,但我从AI&outer
和AI&o
中删除了const
,因为我的AI对象不断变化。请参阅我的编辑。还要确保你的人工智能不断变化,