Я пытаюсь уменьшить избыточность кода, используя перегрузку оператора вывода в поток вместо функций печати.
//***.h
class MainWind : public QWidget
{
Q_OBJECT
public:
explicit MainWind(QWidget *parent = nullptr);
~MainWind();
MainWind *operator<<(const QString &str);
private:
Ui::MainWind *ui;
};
//***.cpp
MainWind *MainWind::operator<<(const QString &str)
{
ui->serverConsole->insertPlainText(str);
return this;
}
В этот момент все успешно компилируется.
Но когда япопробуйте использовать:
//other.cpp
MainWind *mainWind = new MainWind;
mainWind << QString("str");
Я получил эту ошибку:
ServerSocket.cpp: 39: ошибка: недопустимые операнды для двоичного выражения ('MainWind *' и 'QString')qstring.h: 1410: функция-кандидат недопустима: нет известного преобразования из> 'MainWind *' в 'QDataStream &' для 1-го аргумента
...
И кандидатов многодля этой позиции)
Или
//other.cpp
MainWind *mainWind = new MainWind;
mainWind <<"str";
Я получил эту ошибку:
ServerSocket.cpp: 39: ошибка: недопустимые операнды для двоичного выражения('MainWind *' и 'const char [4]') ServerSocket.cpp: 39: ошибка: недопустимые операнды типов 'MainWind *' и 'const char [4]' в двоичный оператор '<<' CurrentSession :: inst () .mainWind () << "str"; </p>
^
В чем может быть проблема?
ДОПОЛНЕНИЕ К ЭТОМУ ЦВESTION:
Попытка использовать:
//*.h
friend MainWind *operator<<(MainWind *out,QString &str);
//***.cpp
MainWind * operator<<(MainWind *out, QString &str)
{
out->ui->serverConsole->insertPlainText(str);
return out;
}
Компиляция предыдущего кода успешна.
Согласно идее, если первый операнд не может быть указателем, этокод не будет компилироваться ...
Но при использовании этого:
//other.cpp
MainWind *mW = new MainWind;
mW << "str";
Компиляция перейдет к ошибке:
ServerSocket.cpp: 37: ошибка: недействительнаоперанды типов 'MainWind *' и 'const char [4]' to binary 'operator <<' mW << "str"; </p>
^