> Are you sure you have carefully observed the above code ??

Heh, you write an H file that #includes a CPP file, and that CPP file #includes the H file, and you ask ME if I'm paying attention. The #ifndef statements will prevent this turning into an infinite loop but you have another problem that means this design is terminally broken.

> So, the .cpp implementation file MUST be included at the end of the .h file.

No, that doesn't make sense. CPP files contain code and you invoke a compiler on a CPP file.
H files contain header information and the whole point of them is to EXCLUDE code and to define stuff ONLY, and they can be #included in multiple CPP files.

So if you #include the CPP file in the H file then the first time you #include the H file in another CPP file you will get a bunch of duplicate symbols at link time. In effect you're breaking the whole point of having separate H and CPP files; you can _only_ use gaussianblur.h in gaussianblur.cpp, you can't use it in something that wants to call the functions in gaussianblur.cpp.

In fact why don't you try it!
// test.cpp
#include "gaussianblur.h"

void f()
  // now call something in gaussianblur.cpp
Compile with somethiing like
gcc gaussianblur.cpp test.cpp -o test

And let me know how many errors you get.