Unfortunately you are facing a collision within global namespace between OCCT and some other framework (ROOT?) both defining Printf() function with the same syntax.
OCCT Standard_CString.hxx:
//! Equivalent of standard C function printf() that always uses C locale
Standard_EXPORT int Printf (const char* theFormat, ...);
ROOT TString.hxx:
extern void Printf(const char *fmt, ...) // format and print
#if defined(__GNUC__)
__attribute__((format(printf, 1, 2)))
#endif
;
The header Standard_CString.hxx is massively included by common headers in OCCT, so that it is practically impossible to avoid including it while including OCCT headers (although you may try hacks like #define _Standard_CString_HeaderFile before including OCCT headers to see if it can survive).
OCCT defines a small set of short-named global functions without extra namespace like Printf(), Abs(), Cos() for historical reasons, and it is difficult to get rid of them without patching OCCT and breaking API compatibility with old code.
I may expect that TString.hxx is also massively included by ROOT headers, so that avoid to include this specific header might be close to impossible.
In such cases, the only reliable workaround is to separate code so that to avoid including both frameworks into the same .cpp file. Though in your case this might be painful if you would like to use both frameworks intensively and separation of GUI and Algorithmic parts with common glue neutral layer.