簡體   English   中英

沒有用於調用 &#39;std::basic_ifstream 的匹配函數<char> ::basic_ifstream(QString&amp;)&#39;

[英]no matching function for call to ‘std::basic_ifstream<char>::basic_ifstream(QString&)’

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

我該如何解決?

謝謝。

使用 QFile 而不是 std::ifstream。

我更喜歡 QFile 而不是 std::ifstream 的最初理由是因為一般來說,如果我正在編寫使用 QString(或另一個 Qt 框架類)的代碼,並且還有其他 Qt 框架類可以實現我想要做的事情(在這種情況下 QFile),我將更喜歡它,因為它會更容易,而且我不必擔心轉換類型/奇怪的邊緣情況。

Scheff 補充了一個很好的理由,在使用 QStrings 時更喜歡 QFile,但我完全忽略了這一點。 他說:

std::string 實際上是編碼不可知的,其中 QString 提供了與各種編碼相互轉換的方法,並且 Qt 中字符串的內部處理是通過定義良好的編碼完成的。 因此,與使用 .toStdString().c_str() 的“hack”相比,QFile 的使用將使應用程序為更好地處理編碼和區域設置內容做好准備。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM