Я родом из Java и недавно решил попробовать создать приложение C ++ Qt GUI "для удовольствия".Я боролся со многими тонкими различиями между Java и c ++, но я многому научился.
Я пытаюсь максимально приблизиться к синтаксису "java-style" в моем C ++ кодировании,Хотя это может или не может быть "лучшей практикой" для C ++, я чувствую, что это помогает при обучении сохранять семейный и последовательный синтаксис.Один из переносов синтаксиса Java заключается в следующем:
//Java
MyObject o = new MyObject();
//C++
MyObject o = MyObject();
Теперь я понимаю, что в C ++ есть синтаксическое сокращение для вышеупомянутого:
//C++
MyObject o();
Это хорошо и все, но, как я уже сказалЯ пока не хочу использовать другой синтаксис.Все работало нормально, но я получил сюрприз, когда попробовал следующий код Qt:
QString filepath = "C:\\somefile";
QFile file = QFile(filepath);
И получил ошибку компиляции:
c:\QtSDK\Desktop\Qt\4.7.2\mingw\include/QtCore/qfile.h:195: error: 'QFile::QFile(const QFile&)' is private within this context
Я прочитал документы Qt и обнаружил, чтодействительно нет открытого конструктора QFile :: QFile (const QFile &).Там, где мой код ранее работал для других классов, был такой конструктор.Здесь я могу сделать предположение и сказать, что строка:
QFile file = QFile(filepath);
фактически вызывает два конструктора.Может кто-нибудь объяснить?