2014-01-28 2 views
0
void FileIO :: openFile(const char* m_FileName,const char* m_FileMode); 

Я получаю сообщение об ошибке:г ++ ifstream ошибка согласования

FileIO.cpp: In static member function ‘static void FileIO::openFile(const char*, const char*)’: 
FileIO.cpp:12:45: error: no matching function for call to ‘std::basic_ifstream<char>::open(const char*&, const char*&)’ 
FileIO.cpp:12:45: note: candidate is: 
In file included from FileIO.h:1:0: 
/usr/include/c++/4.7/fstream:531:7: note: void std::basic_ifstream<_CharT, _Traits>::open(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode] 
/usr/include/c++/4.7/fstream:531:7: note: no known conversion for argument 2 from ‘const char*’ to ‘std::ios_base::openmode {aka std::_Ios_Openmode}’ 
+0

Ум, показывающий ваш 'openFile'? – P0W

+0

http://www.cplusplus.com/reference/fstream/ifstream/open/ – Derek

+0

В сообщении об ошибке говорится, что вы пытаетесь вызвать 'std :: ifstream :: open' с двумя' char const * '. Нет такой функции. –

ответ

4

std::basic_ofstream::open не принимает const char* s. (примечание: ваш вопрос говорит ofstream, но из ваших комментариев, похоже, вы говорите о ifstream).

http://en.cppreference.com/w/cpp/io/basic_ifstream/open

void open(const char *filename, 
      ios_base::openmode mode = ios_base::in); 
void open(const std::string &filename,         
      ios_base::openmode mode = ios_base::in); (since C++11) 

Проблема в том, во-вторых, не первый аргумент.

ifstream ifs; 
ifs.open("hello", "rb" /*<-- problem, this is a const char* not flags.*/); 

Вместо этого вам нужно передать его STD :: ios_base флаги

ifstream ifs("hello", std::ios_base::in | std::ios_base::binary); 

или

ifstream ifs; 
ifs.open("hello", std::ios_base::in | std::ios_base::binary); 

--- EDIT ---

Глядя на ваши комментарии следующие сообщение (почему вы не редактировали сообщение?), вы также пытаетесь проверить «NULL».

В C и C++ «NULL» макрос, который #define d в 0. Таким образом, проверка на NULLможет проверки на нулевой указатель, но он также может проверить для числовых значений. Если вы хотите проверить, если файл открыт, вам нужно будет сделать:

m_FileInput.open("hello", std::ios_base::in | std::ios_base::binary); 
if (!m_FileInput.good()) // checks if the file opened. 

И вы должны попытаться использовать «nullptr» вместо «NULL», когда это возможно.

+0

, но я хочу взять «режим» в качестве входа от пользователя ... если он хочет открыть файл в режиме чтения или записи. .. если он pree 'r' для чтения .. и 'w' для записи ... – user3245610

+0

Затем используйте 'fstream' вместо' ifstream' или 'ofstream', которые являются специализациями для определенного направления. http://www.cplusplus.com/reference/fstream/fstream/ – kfsone

0

Вы пытаетесь использовать синтаксис языка C FILE* для вызова C++ открытой функции. Аргументы режима (чтение/запись/добавление) НЕ являются строковыми литералами в C++, но перечислены значения, возможно, ORed вместе.

Смежные вопросы