我正在尝试通过指针调用另一个函数的函数,我已经完成了一些帖子,并尝试过这样做,但我一直在收到错误。 打印是我想要应用于呼叫的功能。应在打印时打印所有数据。
我收到错误:变量具有不兼容的类型void
void print(double x) //function I want to pass
{
cout << x << endl;
}
void apply(vector<double> data, void (*f)(double))
{ //function with pointer to other function print
for(int i = 0; i< data.sizeof(); i++)
f(data[i]);
}
答案 0 :(得分:1)
它应该适用于以下整个代码:
#include <iostream>
#include <vector>
using namespace std;
void print(double x) //function I want to pass
{
cout << x << endl;
}
void apply(const vector<double>& data, void (*f)(double))
{ //function with pointer to other function print
for(size_t i = 0; i< data.size(); i++)
f(data[i]);
}
void test()
{
vector<double> data;
data.push_back(1.0);
data.push_back(2.0);
data.push_back(3.0);
apply(data, print);
}
答案 1 :(得分:1)
我建议限制std::function或使用auto来完成这项工作:
<div class="col-md-3>
<ul class=" nav nav-pills nav-stacked ">
<li class="active "><a href="# ">Home</a></li>
<li><a href="# ">Menu 1</a></li>
<li><a href="# ">Menu 2</a></li>
<li><a href="# ">Menu 3</a></li>
</ul>
</div>
<div class="col-md-6 ">
Center column
</div>
<div class="col-md-3>
Right column
</div>
或
void apply(const vector<double>& data, std::function<void(double)> f)
{ //function with pointer to other function print
for(size_t i = 0; i< data.size(); i++)
f(data[i]);
}
使用auto将取决于编译器,因为此用法仅在c ++ 14标准之后可用。
答案 2 :(得分:0)
你想要这样的东西:
void apply(const vector<double>& data, void (*f)(double) ) {
for( int i=0; i<data.size(); ++i )
f(data[i]);
}
答案 3 :(得分:0)
我不确切地知道错误是什么。你的代码似乎有效(C ++ 11):
#include <iostream>
#include <vector>
using namespace std;
void print(double x) //function I want to pass
{
cout << x << endl;
}
void apply(const vector<double>& data, void (*f)(double)) { //function with pointer to other function print
for (size_t i = 0; i < data.size(); i++)
f(data[i]);
}
int main() {
vector<double> v{1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9};
apply(v, print);
return 0;
}
结果:
1.1
2.2
3.3
4.4
5.5
6.6
7.7
8.8
9.9
RUN FINISHED; exit value 0; real time: 0ms; user: 0ms; system: 0ms
我所做的唯一改变是:
data.sizeof()
更改为data.size()
,但我认为您已经认为已经(vector
没有名为sizeof()
的公共成员函数apply
的第一个参数(通常)最好声明为const vector<double>& data
。也就是说,你传递一个对未被修改的数据类型/结构的引用(对于预期会更有效的内存消耗对象)。