In the forward. the third argument is double by reference. In the implementation, it is passed by value. As far as the linker is concerned, these are two different functions. A forward declaration and it's implementation must match exactly.