Classes in C++ have methods too.

The problem is that you can't add new methods to an existing class.

More specifically, you cannot add new abstract (aka "pure virtual") methods to an existing class/interface/trait when that class/interface/trait is already extended/implemented by code you don't control.

So hypothetically, if you could add new methods to an existing class, it would solve the problem?

New virtual methods, yes.

Rust lets you combine multiple traits per type.

C++ lets you inherit from multiple classes as well. I don't see how this has anything to do with being able to add new methods to existing types.

There is an important difference: in Rust you can write a new trait, with new methods, and impl that trait for a type without having to change the existing structs/enums which comprise that type at all. You can also do this (with some restrictions, "the orphan rule") for types defined in another library.

In C++ classes, you have to be able to modify a class definition to extend it with new methods (or a new ancestor to multiply inherit from).

You can add traits (with their methods) to existing types, without modification.

C++ classes are types. Rust traits are applied to types.

And what exactly do you think traits apply to types exactly?

If your answer doesn't start with an "m" and end with a "ethod", then you may need to re-read the Rust book found here:

https://doc.rust-lang.org/book/ch10-02-traits.html