为什么我会收到此模板编译错误
Why am i getting this template compile error?
正在学习C++STL,并且正在尝试一个小程序,但在编译时遇到一些奇怪的模板错误,我的代码看起来像这样;
template<class InputIterator, class OutputIterator, class Predicate>
OutputIterator remove_cpy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred)
{
while (first != last){
if (!pred(*first)) *result = *first;
++ first;
}
return result;
}
bool is_manager(const Employee& emp){
return emp.title == "manager";
}
struct Employee{
std::string name;
std::string title;
};
int main()
{
vector<Employee> v;
// create e1 to e4
Employee e1;
e1.name = "john";
e1.title = "accountant";
...
e4.title = "manager";
// add e1 to e4 to vector
v.push_back(e1);
...
v.push_back(e4);
remove_cpy_if(v.begin(), v.end(), std::ostream_iterator<Employee>(cout), is_manager);
....
}
我尝试编译我得到;
$ g++ -o test test.cpp -std=c++11
In file included from c:mingwlibgccmingw324.8.1includec++iterator:66:0,
from test.cpp:5:
c:mingwlibgccmingw324.8.1includec++bitsstream_iterator.h: In instantiation of 'std::ostream_iterator<_Tp, _CharT, _Traits>& st
d::ostream_iterator<_Tp, _CharT, _Traits>::operator=(const _Tp&) [with _Tp = Employee; _CharT = char; _Traits = std::char_traits<char>]
':
test.cpp:19:30: required from 'OutputIterator remove_cpy_if(InputIterator, InputIterator, OutputIterator, Predicate) [with InputItera
tor = __gnu_cxx::__normal_iterator<Employee*, std::vector<Employee> >; OutputIterator = std::ostream_iterator<Employee>; Predicate = bo
ol (*)(const Employee&)]'
test.cpp:78:95: required from here
c:mingwlibgccmingw324.8.1includec++bitsstream_iterator.h:198:13: error: cannot bind 'std::ostream_iterator<Employee>::ostream_
type {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
*_M_stream << __value;
^
In file included from c:mingwlibgccmingw324.8.1includec++iostream:39:0,
from test.cpp:1:
c:mingwlibgccmingw324.8.1includec++ostream:602:5: error: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std
::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = Employee]'
operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x)
^
使用 Mingw g++ 4.8.1、Windows 7 SP1 进行编译
我错过了什么?
问候迦特。
您从不定义应如何输出Employee
。
只需实现以下功能,您就会很好!
std::ostream&
operator<<(std::ostream& out, const Employee& e)
{
/* Print an Employee. */
}
相关文章:
- std::is_base_of表示ctor编译错误
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- 如何修复sfml c++代码编译错误
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- vscode下的Arduino代码出现意外编译错误
- 第三方 API 中的编译错误 - Visual Studio
- std::cout输出int时出现编译错误
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- 提升图广度优先搜索前置编译错误
- C++ 中的编译错误:未定义对"主"的引用 collect2:错误:ld 返回 1 个退出状态
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 我在C++中遇到了这个奇怪的编译错误
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- 使用 std::enable_if 限制派生类的模板参数时出现编译错误
- 现代OpenGL和GLEW Libraray的编译错误
- C++ 编译错误:意外的类型名称"字符串":预期的表达式
- C ++程序编译错误,找不到/访问文件
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么传递非静态成员函数会导致编译错误?