【发布时间】:2020-07-13 23:58:20
【问题描述】:
这是我第一次使用 QString,我不知道如何解决这个错误:
Personanetscape.cpp:16: error: no matching function for call to ‘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;
}
我该如何解决这个问题?
谢谢。
【问题讨论】:
-
Qt 和
std是两个独立的 API,它们不直接兼容,但QString提供了方法 toUtf8() 和 toStdString() 可以帮助您解决问题。 -
请尝试
fileIn(nameFileIn.toStdString().c_str())。 -
谢夫非常感谢,它成功了。
-
Qt 添加了许多在撰写本文时在 C++ 标准库中不可用的东西。同时,std的开发也关闭了。所以,有很多重复的东西(有时有点不同,因为 std 更通用,而 Qt 更面向应用程序)。至少,Qt 开发人员尽了最大的努力为标准类添加合适的适配器。