gpt4 book ai didi

c++ - 以下代码不起作用

转载 作者:行者123 更新时间:2023-11-30 01:21:23 24 4
gpt4 key购买 nike

我正在使用 MSVC 2012,当我编译下面的程序时它说:

The term does not evaluate to a function taking 0 arguments

我确定问题出在 mem_funmem_fun_ref 函数调用上。请提供调用函数的正确方法。

#include<iostream>
#include<algorithm>
#include<functional>
#include<string>
#include<vector>
#include<iterator>

using namespace std;

#define PRINT(A, Sp) copy(A.begin(), A.end(), ostream_iterator<decltype(*A.begin())>(cout, Sp))

struct Generate {
int a;
Generate(int a) : a(a) {
}
Generate gen() {
return Generate(rand()%100);
}
void testing() {
vector<Generate> a(5), b, c;
generate(a.begin(), a.end(), mem_fun(&Generate::gen));
generate_n(back_inserter(b), 5, mem_fun_ref(&Generate::gen));
}
};

void main() {
Generate a(32);
a.testing();
}

最佳答案

问题是 mem_fun 返回的仿函数将有一个 operator() 接受 1 个类型为 Generate* 的参数,但是仿函数使用std::generate 不应带任何参数。

如果 gen 不需要访问类数据,您可以将其设为 static 并完全摆脱 mem_fun:

#include<iostream>
#include<algorithm>
#include<functional>
#include<string>
#include<vector>
#include<iterator>
using namespace std;
#define PRINT(A, Sp) copy(A.begin(), A.end(), ostream_iterator<decltype(*A.begin())>(cout, Sp))
struct Generate {
int a;
Generate() {}
Generate(int a) : a(a) {
}
static Generate gen() {
return Generate(rand()%100);
}
void testing() {
vector<Generate> a(5), b, c;
generate(a.begin(), a.end(), &Generate::gen);
generate_n(back_inserter(b), 5, &Generate::gen);
}
};

int main() {
Generate a(32);
a.testing();
}

在我添加默认构造函数并使 main 返回 int 后,这编译得很好。

关于c++ - 以下代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18127540/

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