2016-03-03 1 views
0

J'utilise le flux de fichier de chaîne large std :: wofstream pour ouvrir un fichier et lire son contenu. J'ai utilisé l'en-tête fstream. Mais quand je compile ce code sur XCode 7, il montre l'erreur suivantestd :: wofstream :: open ne fonctionne pas sur MAC/Xcode

No matching member function for call to 'open' 

mon code était comme

header used <fstream> 

std::wofstream out; 
out.open(filename, std::ios::binary); <--- error 
* filename is wide char string 

REMARQUE: Il travaille sur les fenêtres fines avec Visual Studio 2015.

Répondre

1

std::wofstream est juste un std::basic_ofstream avec un type de modèle de wchar_t. std::basic_ofstream::open a deux par la norme surcharges

void open(const char *filename, 
     ios_base::openmode mode = ios_base::out); 
void open(const std::string &filename,         
     ios_base::openmode mode = ios_base::out); 

Comme vous pouvez le voir ni de prendre ensuite un wchar_t* ou std::wstring. Je suspecte que MSVS a ajouté une surcharge pour accommoder en utilisant open avec des chaînes larges où xcode n'a pas fait.

Vous devriez avoir aucun problème passer un std::string ou un const char* à open()

Je voudrais souligner qu'il n'y a aucune raison de construire l'objet puis appelez open(). Si vous voulez construire et ouvrir un fichier, utilisez simplement le constructeur qui le fera.

std::wofstream out; 
out.open(filename, std::ios::binary); 

Devient

std::wofstream out(filename, std::ios::binary); 
+0

donc, dois-je convertir le nom de fichier à std :: string? – Jai

+0

@Jai Si vous l'avez en tant que 'std :: wstring' alors oui. Vous pouvez voir comment faire cela ici: http://stackoverflow.com/questions/4804298/how-to-convert-wstring-into-string – NathanOliver