将函数指针传递给函数,c ++

时间:2015-12-01 08:04:42

标签: c++ function pointers

我正在尝试通过指针调用另一个函数的函数,我已经完成了一些帖子,并尝试过这样做,但我一直在收到错误。 打印是我想要应用于呼叫的功能。应在打印时打印所有数据。

我收到错误:变量具有不兼容的类型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]);
        }

4 个答案:

答案 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。也就是说,你传递一个对未被修改的数据类型/结构的引用(对于预期会更有效的内存消耗对象)。