нет соответствующей функции для вызова 'std :: basic_ifstream <char>:: basic_ifstream (QString &)' - PullRequest
1 голос
/ 02 апреля 2020

я впервые работаю с QString, я не знаю, как решить эту ошибку:

Personanetscape. cpp: 16: ошибка: нет подходящей функции для вызова 'std :: basic_ifstream :: basic_ifstream (QString &) '

это мой .h

#include <iostream>
#include <fstream>
#include <string>
#include <qstring.h>
#include <qmap.h>

typedef QMap<QString, QString> Map;


class PersonaNetscape
{
  private:
    std::ifstream fileIn;
    Map map;

  public:
    PersonaNetscape(QString nameFileIn);
    ~PersonaNetscape();
    bool personIn(); 
    QString search(QString field); 
};

это мой. cpp

#include "Personanetscape.h"


PersonaNetscape::PersonaNetscape(QString nameFileIn)
                : fileIn(nameFileIn) //this is line 16 in my code
{
  if(!fileIn)
    throw nameFileIn;
}

Как это исправить?

Спасибо.

1 Ответ

2 голосов
/ 02 апреля 2020

Используйте QFile вместо std :: ifstream.

Мои первоначальные рассуждения о том, что я предпочитаю QFile, а не std :: ifstream, были из-за того, что в общем случае я пишу код, использующий QString (или другой каркасный класс Qt) и есть другие классы каркаса Qt, которые достигают того, что я пытаюсь сделать (в данном случае QFile), я предпочту это просто потому, что это будет проще, и мне не нужно беспокоиться о преобразовании типов / странные крайние случаи.

Шефф добавил вескую причину, чтобы предпочесть QFile при использовании QStrings, который я полностью пропустил. Он сказал:

std :: string фактически кодирует agnosti c, где QString предоставляет методы для преобразования в и из различных кодировок, а внутренняя обработка строк в Qt выполняется с помощью четко определенного кодирование. Следовательно, использование QFile подготовит приложение к лучшей обработке кодирования и локали, чем «взлом» с .toStdString (). C_str ().

...