【发布时间】:2020-02-17 04:18:32
【问题描述】:
我有以下代码:
#include <iostream>
#include <vector>
#include <string>
#include <functional>
using namespace std;
struct AStruct {
string astr;
};
class OtherClass1 {
public:
OtherClass1(string s) : str(s) {};
string str;
};
class OtherClass2 {
public:
OtherClass2(string s) : str(s) {};
string str;
};
struct BStruct {
vector<OtherClass1> vOC1;
vector<OtherClass2> vOC2;
};
class MainClass {
public:
MainClass() {};
void Update(const BStruct& BS) {
AStruct v1 = Func(Func1, BS.vOC1);
AStruct v2 = Func(Func2, BS.vOC2);
cout << "v1 = " << v1.astr << endl;
cout << "v2 = " << v2.astr << endl;
}
private:
AStruct Func1(const OtherClass1& oc1) {
AStruct AS;
AS.astr = oc1.str + " oc1 ";
return AS;
}
AStruct Func2(const OtherClass2& oc2) {
AStruct AS;
AS.astr = oc2.str + " oc2 ";
return AS;
}
// AStruct Func3(const OtherClass3& oc3); ...
template <typename T>
AStruct Func(function<AStruct(const T&)> Funky, const vector<T>& Foos) {
AStruct ast;
for (size_t i = 0; i < Foos.size(); ++i)
ast = Funky(Foos[i]);
return ast;
}
};
请忽略函数的愚蠢之处,这是我能想到的最简单的方法。想法是 Func 对 OtherClass1 和 OtherClass2 类的对象执行一些逻辑序列,其中那些对象类由不同的函数处理,通常以向量形式出现。
编译时出错:
error: invalid use of non-static member function ‘AStruct MainClass::Func1(const OtherClass1&)’
43 | AStruct v1 = Func(Func1, BS.vOC1);
虽然这可能是一个糟糕的解决方案(设计不佳的结果),但为什么会出现上述错误?
【问题讨论】:
-
它必须是非静态的吗?从我所见,主类没有任何变量成员。您可以随时将其设为
static AStruct Func1(...并收工。 -
也许它确实需要是非静态的,因为
Func1/2使用来自MainClass的成员变量(我没有在这个例子中包括它们,抱歉)。但是这个错误到底是什么?将函数作为参数传递有什么特别之处。
标签: c++