error: 'setChar' was not declared in this scope

Well, "Serial.write" and "tone" also have some optional arguments. I don't understand, why I couldn't use them?

...

Because those are classes, not functions. Classes can have multiple methods with varying arguments.

In C++ any function can have optional arguments. Example:

int foo (int a, int b, int c = 0, bool d = false)
  {
  int result = a + b;
  if (d)
    result -= c;
  else
    result += c;
  return result; 
  }

void setup ()
  {
  foo (1, 2);
  foo (4, 5, 6);
  foo (8, 9, 42, true);  
  }  // end of setup
  
void loop () { }