没有匹配功能可调用‘std :: basic_ifstream :: basic_ifstream(QString&)'

问题描述 投票:0回答:1

这是我第一次使用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;
}

我该如何解决?

谢谢。

c++ qstring
1个回答
2
投票

使用QFile代替std :: ifstream。

我最初倾向于选择QFile而不是std :: ifstream的原因是因为通常来说,如果我正在编写使用QString(或其他Qt框架类)的代码,并且还有其他Qt框架类可以实现我正在尝试的功能这样做(在这种情况下为QFile),我会更喜欢这样做,因为这样做会更容易,而且我不必担心转换类型/奇怪的情况。

Scheff添加了一个使用我完全被忽略的QString时更喜欢QFile的理由。他说:

std :: string实际上是不可知的编码,其中QString提供了各种编码之间的转换方法,并且Qt中对字符串的内部处理是使用定义明确的编码完成的。因此,与使用.toStdString()。c_str()的“ hack”相比,QFile的使用将为应用程序更好地处理编码和语言环境做好准备。

© www.soinside.com 2019 - 2024. All rights reserved.