As a slight variation from cassiorenan's solution, you could use a class containing one public static function (the visible function) and one static private function that could only be called from there. To avoid creation of objects of that class, it is enough to put a private constructor.
EDIT:
Per cassiorenan's comment, I can see that OP really needs methods and not functions. In that case, I would still use a dedicated class in a anonymous namespace to ensure it is not visible from elsewhere (even if my example is single file ...) friend to the class really used. So in below example, bar is the business class that would have a method with an externally hidden implementation (here relay_method), and foo is dedicated to the hidden method called with a pointer to the real object. In real world, the whole anonymous namespace and the implementation of the hidden method should be in the implementation file bar.cpp.
That way, the real implementation function priv_func can only be called from a bar object through bar::relay_method() and foo::bar_func(bar &).
#include <iostream> class bar; namespace { class foo { private: static int priv_func(int i) { return i * i; } foo() {} public: // only useful if true functions were needed /* static int pub_func(int i, int j) { return priv_func(i) + priv_func(j); }*/ static void bar_func(bar& b); }; } class bar { int x; int x2; public: bar(int i): x(i) {} void relay_method() { foo::bar_func(*this); } friend class foo; int getX2() const { return x2; } }; void foo::bar_func(bar& b) { b.x2 = foo::priv_func(b.x); } using namespace std; int main() { /* int i = foo::pub_func(3,4); cout << i << endl; // foo::priv_func(2); error access to private member of class foo // foo f; */ bar b(2); b.relay_method(); cout << b.getX2() << endl; return 0; }