我一直在反对这个和谷歌一段时间,所以我希望可以问。我仍在学习C ++并享受它,但我还没有完全理解所有内容,而且我现在正在挖掘我的Data Structures类中的指针和类。为什么我不能使用这种方法比较树对象的适应度变量?
我收到错误:'环境::比较':非标准语法;使用'&'创建指向成员的指针。
void Environment::evolve(const int popsize,const int maxgen) {
std::cout << "> evolving function" << std::endl;
std::vector<Tree> popvec;
// Generate initial pop trees and store in array
for (int i = 0; i <= popsize - 1; i++) {
std::cout << "> generating initial population" << std::endl;
Tree membertree;
popvec.push_back(membertree);
}
// Loop for generations
for (int j = 1; j <= maxgen; j++) {
std::cout << "Generation " << j << ":" << std::endl;
// sort array by fitness
std::sort(popvec.begin(), popvec.end(), compare);
// cull herd
// reproduce
}
}
bool Environment::compare(Tree obj1, Tree obj2) {
return (obj1.fitness < obj2.fitness);
}
感谢您的帮助。
使用标题编辑:
#include "Tree.h"
class Environment {
public:
Environment();
~Environment();
void evolve(const int popsize,const int maxgen);
bool compare(Tree obj1, Tree obj2);
private:
Tree* poparray;
};
答案 0 :(得分:0)
std::sort(popvec.begin(), popvec.end(), compare);
您正在引用compare
,这是一个类成员函数。要传递指向类成员(数据或函数)的指针,您需要使用&Class::Member
语法:
std::sort(popvec.begin(), popvec.end(), &Environment::compare);
但除非compare
是一个静态函数,否则这不会起作用 - 因为它应该是(或者你可以通过传递一个有状态的lambda / functor做体操,但没有理由一个理智的人会这样做)。
您应该更改compare
的声明 - 将其设为static
成员函数:
static bool compare(Tree obj1, Tree obj2);
如果您这样做,则不再需要更改sort
调用语法(尽管仍然有效)
答案 1 :(得分:0)
您必须将Environment::compare
声明为static
,例如:
class Environment {
...
static bool compare (Tree obj1, Tree obj2);
...
};