2015-09-06 63 views
-2

我正在为我所有的函数调用此错误消息,我就被初始化为下文头文件gcc编译错误4.2.2。但工作在Xcode 6.4

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>]

+1

GCC 4.4.2不能正确执行C++ 11。 –

+0

@πάνταῥεῖ我如何解决它? –

+0

如果你告诉任何人错误信息是什么,它*可能会有所帮助。 – molbdnilo

回答

0

使用std::string作为文件操作的参数在C++ 11中引入,仅在gcc 4.7左右完全支持(这个特性很可能在旧版本中可用) (因为“compler/runtime提供的新功能通常是一次引入的”),但4.2.2是在2007年发布的4.2.0中的错误修复,所以它大约有8年的历史目前为止。

编辑:据我所知,XCode 6.4使用了一个版本的Clang 3.6,它应该有完整的C++ 11支持。结束编辑。编辑2:您可以使用-std=c++03作为XCode编译器的额外选项,这可以确保编译在XCode中的代码也可以在gcc 4.2.2编译器中编译。结束编辑2

当然,如果您不需要任何其他C++ 11功能,则可以用x.open(name.c_str())替换x.open(name)

我会然而有专人负责为您选择学校的编译器和查询它是否是使用编译器是迄今为止过时的故意决策的聊天......

+0

如何在XCode编译器上使用-std = C++ 03? –

+0

我没有使用过XCode IDE,所以我不确定细节,但是在某个地方你应该是一个“编译器选项”设置集合,它可以有一个“标准跟随”选项,或者应该有一个指定“附加选项”的方式。 –