gpt4 book ai didi

c++ - 为什么我会收到此模板编译错误?

转载 作者:行者123 更新时间:2023-11-30 03:57:57 25 4
gpt4 key购买 nike

正在学习 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:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iterator:66:0,
from test.cpp:5:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stream_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:\mingw\lib\gcc\mingw32\4.8.1\include\c++\bits\stream_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:\mingw\lib\gcc\mingw32\4.8.1\include\c++\iostream:39:0,
from test.cpp:1:
c:\mingw\lib\gcc\mingw32\4.8.1\include\c++\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. */
}

关于c++ - 为什么我会收到此模板编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com