When you have a function (pointer) as an argument to another function in c++ does the function (that is in the argument) have to be a void function?

eg. Can you have a function like 

```
void run(int (*method)(int, double, vector), int dimension)

```

here the function method returns an int not a void. I am also having difficulty with the vector. Should it be a &vector?

When I then call it in my main I have it as: 

```
run(jacobi_method(Vnew, V, vec), dimension);

```

but it does not want to work. 
Thanks