Как объявить их так, чтобы избежать подобных ошибок?
Очень странная конструкция в коде:
- если это такой уж univeralTool, то зачем он завязывается на поле какого-то конкретного объекта какого-то класса?
- если уж надо завязаться на поле объекта, то почему эта функция -- не член этого класса?
- если надо обработать какое-то значение, то почему не передать это значение как аргумент функции?
Ну и если и ни то и ни сё, и действительно надо как написано в коде -- то раздели всё на части и используй объявления или упорядочи определения функций как следует, например так:
class someClass {
public:
void someClassTool();
int variableInClass = 5;
};
Someclass someclass;
void someUniversalTool()
{
int variable1 = someClass.variableInClass ;
//some additional code
}
void SomeClass::someClassTool()
{
someUniversalTool();
//some additional code
}