我的所有函数调用都收到此错误消息,并且它在头文件中的初始化如下
void Initialisation(std::fstream &file, std::string name);
void Input(std::fstream &file, std::string name);
void Print(std::fstream &file, std::string name);
void Update(std::fstream &file, std::string name);
void Insert(std::fstream &file, std::string name);
void Delete(std::fstream &file, std::string name);
并像这样在主文件中调用
Initialisation(dataFile, "hardware.dat");
hardware.cpp: In function 'void Initialisation(std::fstream&, std::string)': hardware.cpp:13: error: no matching function for call to 'std::basic_fstream<char, std::char_traits<char> >::open(std::string&, std::_Ios_Openmode)' /packages/gcc/4.2.2/lib/gcc/sparc-sun-solaris2.10/4.2.2/../../../../include/c++/4.2.2/fstream:778: note: candidates are: void std::basic_fstream<_CharT, _Traits>::open(const char*, std::_Ios_Openmode) [with _CharT = char, _Traits = std::char_traits<char>]
使用std::string
作为参数传递给在C ++ 11,引入了文件操作仅根据GCC 4.7左右完全支持(这个特殊的功能很可能是在旧版本的gcc可用(因为“由compler提供的新功能/运行时通常是(一次)引入),但4.2.2是对4.2.0的错误修复,该版本于2007年发布,因此至今已有8年的历史了。
编辑:据我所知,XCode 6.4使用Clang 3.6版本,该版本应具有完整的C ++ 11支持。结束编辑。
Edit2:您可以-std=c++03
在XCode编译器上使用额外的选项,以确保在XCode中编译的代码也可以在gcc 4.2.2编译器中编译。结束编辑2
当然,如果您不需要任何其他C ++ 11功能,则可以替换x.open(name)
为x.open(name.c_str())
。
但是,我将与负责您学校选择编译器的人进行聊天,并询问是否故意使用过时的编译器...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句