[英]Passing Function Pointers to Functions, c++
我試圖獲得一個通過指針調用另一個函數的函數,我已經閱讀了一些文章並試圖做到這一點,但我一直遇到錯誤。 打印是我要應用於調用的功能。 Apply應該在調用print時打印所有數據。
我收到錯誤消息:變量具有不兼容的類型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]);
}
它應與以下整個代碼一起使用:
#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);
}
我建議鉗住std :: function或use和auto來完成這樣的工作:
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]);
}
要么
void apply(const vector<double>& data, auto f)
{ //function with pointer to other function print
for(size_t i = 0; i< data.size(); i++)
f(data[i]);
}
使用auto將取決於編譯器,因為此用法僅在c ++ 14標准之后可用。
您想要類似的東西:
void apply(const vector<double>& data, void (*f)(double) ) {
for( int i=0; i<data.size(); ++i )
f(data[i]);
}
我看不出到底是什么錯誤。 您的代碼似乎可以正常工作(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
。 也就是說,您傳遞了對不會被修改的數據類型/結構的引用(對於預期會更有效的內存消耗對象)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.