gpt4 book ai didi

c++ - 非法使用非静态成员函数

转载 作者:IT老高 更新时间:2023-10-28 22:02:38 26 4
gpt4 key购买 nike

我有这样的事情:

class Bar
{
public:
pair<string,string> one;
std::vector<string> cars;
Bar(string one, string two, string car);
};

class Car
{
public:
string rz;
Bar* owner;
Car(string car, Bar* p);
};

class Foo
{
public:
Foo ( void );
~Foo ( void );
int Count ( const string & one, const string & two) const;
int comparator (const Bar & first, const Bar & second) const;
std::vector<Bar> bars;
};

int Foo::comparator(const Bar & first, const Bar & second) const{
return first.name < second.name;
}

int Foo::Count ( const string & one, const string & two ) const{
int result=0;
Bar mybar = Bar( one, two, "" );
std::vector<Bar>::iterator ToFind = lower_bound(bars.begin(), bars.end(), mybar, comparator);
if (ToFind != bars.end() && ToFind->one == mybar.one ){
result = ...
}
return result;
}

方法Foo::Count应该使用 std::lower_bound()vector<Bar> 中查找元素根据对两个字符串。现在不起作用的部分。至lower_bound()我提供方法comparator() .我以为没问题,但是g++说:

c.cpp: In member function ‘int Foo::Count(const string&, const string&) const’:
c.cpp:42:94: error: invalid use of non-static member function
std::vector<Bar>::iterator ToFind = lower_bound(bars.begin(), bars.end(), mybar, comparator);

还有方法Count()一定要留const ...

我对 C++ 很陌生,因为我被迫学习它。

有什么想法吗?

最佳答案

最简单的解决方法是让比较器函数是静态的:

static int comparator (const Bar & first, const Bar & second);
^^^^^^

当在Count中调用它时,它的名字将是Foo::comparator

按照你现在的方式,作为非静态成员函数没有意义,因为它不使用任何 Foo 的成员变量。

另一个选择是让它成为一个非成员函数,特别是如果这个比较器可能被除了 Foo 之外的其他代码使用是有意义的。

关于c++ - 非法使用非静态成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29286863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com