Пример

class MyClass {
public:
int publicVar;
int publicFnc(){//должна быть функцией-членом
privateFnc();
return privateVar;
}

int memberFnc();//не должна быть функцией-членом

protected:
int privateVar;
private:
int privateFnc(){ return privateVar; }

};

int MyClass::memberFnc(){
publicFnc();
return publicVar;
}

Решение
Сделать, чтобы функция перестала быть функцией-членом, и чтобы она принимала класс в качестве параметра и выполняла те же действия.

class MyClass {
public:
int publicVar;
int publicFnc(){//должна быть функцией-членом
privateFnc();
return privateVar;
}

protected:
int privateVar;
private:
int privateFnc(){ return privateVar; }

};

int nonMemberFunction(const MyClass& mc){
mc.publicFnc();
return mc.publicVar;
}