c – 在Windows上使用GCC的代码编译错误
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c – 在Windows上使用GCC的代码编译错误,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2461字,纯文字阅读大概需要4分钟。
内容图文
我有一段简单的代码,它给了我一个编译器错误.我在Visual Studio下的Windows环境中编译和运行它没有任何问题,但现在在linux下,使用gcc,我遇到了问题.注意我使用的是gcc 4.4.5,并使用-std = c 0x指令.
此代码段位于头文件file_handling.h中,其中包含所有必需的库(vector,string,fstream等).变量’output_file’是LogFile对象的成员,并在其他地方正确检查/实例化/ etc.代码本身很简单,这就是我难倒的原因:
template <typename T> void LogFile::put(std::string const & header, std::vector<T> const & data) {
output_file << header << " " << std::scientific << data[0] << std::endl;
for (std::vector<T>::const_iterator value = (data.begin()+1); value < data.end(); ++value) {
output_file << *value << std::endl;
}
}
编译器声明:
In file included from file_handling.cpp:2:
file_handling.h: In member function 'void LogFile::put(const std::string&, const std::vector<T, std::allocator<_Tp1> >&)':
file_handling.h:132: error: expected ';' before 'value'
file_handling.h:132: error: 'value' was not declared in this scope
make: *** [file_handling.o] Error 1
为什么gcc没有看到’value’的原位声明为const_iterator?我已经尝试了以下作为一个完整性检查:
template <typename T> void LogFile::put(std::string const & header, std::vector<T> const & data) {
std::vector<T>::const_iterator value;
output_file << header << " " << std::scientific << data[0] << std::endl;
for (value = (data.begin()+1); value < data.end(); ++value) {
output_file << *value << std::endl;
}
}
并收到完全相同的编译器报告.鉴于这看起来很简单,并且在Visual Studio中运行良好,我对gcc和/或Linux环境有什么遗漏或误解?
解决方法:
正确的形式应该是:
template <typename T> void LogFile::put(std::string const & header, std::vector<T> const & data) {
output_file << header << " " << std::scientific << data[0] << std::endl;
for (typename std::vector<T>::const_iterator value = (data.cbegin()+1); value != data.cend(); ++value) {
output_file << *value << std::endl;
}
}
注意添加typename,以及从begin()和end()到cbegin()和cend()的更改.
使用模板化类型时需要typename. begin()和end()不适用于const_iterators.
编辑:显然begin()和end()将返回const_iterators.我从来没有将它们用于那个目的,并且总是使用cbegin()和cend(),因为增加了清晰度和强制返回类型.我猜他自己.
注意:为简化起见,您可以使用c 11中的新auto关键字.
template <typename T> void LogFile::put(std::string const & header, std::vector<T> const & data) {
output_file << header << " " << std::scientific << data[0] << std::endl;
for (auto value = (data.cbegin()+1); value != data.cend(); ++value) {
output_file << *value << std::endl;
}
}
内容总结
以上是互联网集市为您收集整理的c – 在Windows上使用GCC的代码编译错误全部内容,希望文章能够帮你解决c – 在Windows上使用GCC的代码编译错误所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。