Когда вы делаете std::cout << temp;
, это означает, что вы применяете оператор <<
к std::cout
(так как операторы остаются ассоциативными). Если вы хотите написать оператор, который является функцией-членом для достижения этой цели, вам придется перегрузить оператор <<
к тому классу, к которому принадлежит std::cout
, что невозможно, поскольку это то, что вы не можете изменить.
Таким образом, вы должны написать функцию, которая разрешает это, одним из способов является перегрузка <<
в глобальном пространстве имен, которая принимает два аргумента, поток и объект, который вы хотите отобразить на консоли. как то так
std::ostream& operator<< (std::ostream& stream, Test& temp)
Теперь вы можете сделать это другом или нет. Если вы не сделаете его другом, вам придется предоставить функции получения (например, getMVar
), которые предоставят вам значение членов Test
class. Однако это не очень хороший подход. Так как это вам не нужно, чтобы обеспечить функции получения. Поэтому обычно принято дружить с такими операторами.
Как указывалось ранее, то, что вы делаете, приведет к тому, что код будет написан как temp << std::cout
, что явно не то, что вы хотите.