对大量c++错误输出完全一无所知.我认为这与预定义的函数和迭代器有关
Completely clueless on massive c++ error output. I think it has to do with predefined functions and iterator
以下是代码:
#include <vector>
#include <string>
#include <algorithm>
#include "inventory.h"
#include <sstream>
#include <iostream>
using namespace std;
Inventory::Inventory () {
}
bool Inventory::NameSort(vector<string> word1, vector<string> word2) {
return word1[0].compare(word2[0]) <= 0;
}
bool Inventory::IntSort(vector<string> int1, vector<string> int2) {
int first = atoi(int1[1].c_str());
int second = atoi(int2[1].c_str());
return first <= second;
}
int Inventory::vectcontains(string item) {
for(unsigned int i = 0; i < inventory.size(); i++) {
if(inventory[i][0].compare(item) == 0) {
return i;
}
}
return -1;
}
void Inventory::Update (string item, int amount) {
int contains = vectcontains(item);
if( contains < 0) {
stringstream ss;
ss << amount;
vector<string> adding (item, ss.str());
inventory.push_back(adding);
}
else {
int old = atoi((inventory[contains][1]).c_str());
stringstream stst;
stst << (amount + old);
string put = stst.str();
inventory[contains].at(1) = put;
}
}
void Inventory::ListByName () {
sort(inventory.begin(), inventory.end(), NameSort);
for (unsigned int i = 0; i < inventory.size(); i++) {
cout << inventory[i][0] << inventory[i][1] << endl;
}
}
void Inventory::ListByQuantity () {
sort(inventory.begin(), inventory.end(), IntSort);
for(unsigned int i = 0; i < inventory.size(); i++) {
cout << inventory[i][0] << inventory[i][1] << endl;
}
}
这是输出:
$ g++ -g -Wall inventory.cpp
In file included from c:mingwincludec++4.9.1bitsstl_algobase.h:65:0,
from c:mingwincludec++4.9.1vector:60,
from inventory.cpp:1:
c:mingwincludec++4.9.1bitsstl_iterator_base_types.h: In instantiation of '
struct std::iterator_traits<std::basic_string<char> >':
c:mingwincludec++4.9.1bitsstl_vector.h:1262:24: required from 'void std:
:vector<_Tp, _Alloc>::_M_initialize_dispatch(_InputIterator, _InputIterator, std
::__false_type) [with _InputIterator = std::basic_string<char>; _Tp = std::basic
_string<char>; _Alloc = std::allocator<std::basic_string<char> >]'
c:mingwincludec++4.9.1bitsstl_vector.h:413:55: required from 'std::vecto
r<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [w
ith _InputIterator = std::basic_string<char>; _Tp = std::basic_string<char>; _Al
loc = std::allocator<std::basic_string<char> >; std::vector<_Tp, _Alloc>::alloca
tor_type = std::allocator<std::basic_string<char> >]'
inventory.cpp:33:50: required from here
c:mingwincludec++4.9.1bitsstl_iterator_base_types.h:165:53: error: no type
named 'iterator_category' in 'class std::basic_string<char>'
typedef typename _Iterator::iterator_category iterator_category;
^
In file included from c:mingwincludec++4.9.1bitsstl_algobase.h:71:0,
from c:mingwincludec++4.9.1vector:60,
from inventory.cpp:1:
c:mingwincludec++4.9.1bitspredefined_ops.h: In instantiation of 'bool __gn
u_cxx::__ops::_Iter_comp_iter<_Compare>::operator()(_Iterator1, _Iterator2) [wit
h _Iterator1 = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char>
>*, std::vector<std::vector<std::basic_string<char> > > >; _Iterator2 = __gnu_cx
x::__normal_iterator<std::vector<std::basic_string<char> >*, std::vector<std::ve
ctor<std::basic_string<char> > > >; _Compare = bool (Inventory::*)(std::vector<s
td::basic_string<char> >, std::vector<std::basic_string<char> >)]':
c:mingwincludec++4.9.1bitsstl_algo.h:1846:27: required from 'void std::_
_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _R
andomAccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string
<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Compare = __g
nu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_string
<char> >, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1884:70: required from 'void std::_
_final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [w
ith _RandomAccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_
string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Compare
= __gnu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_
string<char> >, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1970:55: required from 'void std::_
_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAcces
sIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*,
std::vector<std::vector<std::basic_string<char> > > >; _Compare = __gnu_cxx::__
ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_string<char> >,
std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:4707:78: required from 'void std::s
ort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<std
::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<c
har> > > >; _Compare = bool (Inventory::*)(std::vector<std::basic_string<char> >
, std::vector<std::basic_string<char> >)]'
inventory.cpp:45:58: required from here
c:mingwincludec++4.9.1bitspredefined_ops.h:121:46: error: must use '.*' or
'->*' to call pointer-to-member function in '((__gnu_cxx::__ops::_Iter_comp_ite
r<bool (Inventory::*)(std::vector<std::basic_string<char> >, std::vector<std::ba
sic_string<char> >)>*)this)->__gnu_cxx::__ops::_Iter_comp_iter<bool (Inventory::
*)(std::vector<std::basic_string<char> >, std::vector<std::basic_string<char> >)
>::_M_comp (...)', e.g. '(... ->* ((__gnu_cxx::__ops::_Iter_comp_iter<bool (Inve
ntory::*)(std::vector<std::basic_string<char> >, std::vector<std::basic_string<c
har> >)>*)this)->__gnu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vect
or<std::basic_string<char> >, std::vector<std::basic_string<char> >)>::_M_comp)
(...)'
{ return bool(_M_comp(*__it1, *__it2)); }
^
c:mingwincludec++4.9.1bitspredefined_ops.h: In instantiation of 'bool __gn
u_cxx::__ops::_Val_comp_iter<_Compare>::operator()(_Value&, _Iterator) [with _Va
lue = std::vector<std::basic_string<char> >; _Iterator = __gnu_cxx::__normal_ite
rator<std::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic
_string<char> > > >; _Compare = bool (Inventory::*)(std::vector<std::basic_strin
g<char> >, std::vector<std::basic_string<char> >)]':
c:mingwincludec++4.9.1bitsstl_algo.h:1827:34: required from 'void std::_
_unguarded_linear_insert(_RandomAccessIterator, _Compare) [with _RandomAccessIte
rator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, std
::vector<std::vector<std::basic_string<char> > > >; _Compare = __gnu_cxx::__ops:
:_Val_comp_iter<bool (Inventory::*)(std::vector<std::basic_string<char> >, std::
vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1855:46: required from 'void std::_
_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _R
andomAccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string
<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Compare = __g
nu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_string
<char> >, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1884:70: required from 'void std::_
_final_insertion_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [w
ith _RandomAccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_
string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Compare
= __gnu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_
string<char> >, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1970:55: required from 'void std::_
_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAcces
sIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*,
std::vector<std::vector<std::basic_string<char> > > >; _Compare = __gnu_cxx::__
ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_string<char> >,
std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:4707:78: required from 'void std::s
ort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<std
::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<c
har> > > >; _Compare = bool (Inventory::*)(std::vector<std::basic_string<char> >
, std::vector<std::basic_string<char> >)]'
inventory.cpp:45:58: required from here
c:mingwincludec++4.9.1bitspredefined_ops.h:166:37: error: must use '.*' or
'->*' to call pointer-to-member function in '((__gnu_cxx::__ops::_Val_comp_iter
<bool (Inventory::*)(std::vector<std::basic_string<char> >, std::vector<std::bas
ic_string<char> >)>*)this)->__gnu_cxx::__ops::_Val_comp_iter<bool (Inventory::*)
(std::vector<std::basic_string<char> >, std::vector<std::basic_string<char> >)>:
:_M_comp (...)', e.g. '(... ->* ((__gnu_cxx::__ops::_Val_comp_iter<bool (Invento
ry::*)(std::vector<std::basic_string<char> >, std::vector<std::basic_string<char
> >)>*)this)->__gnu_cxx::__ops::_Val_comp_iter<bool (Inventory::*)(std::vector<s
td::basic_string<char> >, std::vector<std::basic_string<char> >)>::_M_comp) (...
)'
{ return bool(_M_comp(__val, *__it)); }
^
c:mingwincludec++4.9.1bitspredefined_ops.h: In instantiation of 'bool __gn
u_cxx::__ops::_Iter_comp_val<_Compare>::operator()(_Iterator, _Value&) [with _It
erator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*, st
d::vector<std::vector<std::basic_string<char> > > >; _Value = std::vector<std::b
asic_string<char> >; _Compare = bool (Inventory::*)(std::vector<std::basic_strin
g<char> >, std::vector<std::basic_string<char> >)]':
c:mingwincludec++4.9.1bitsstl_heap.h:129:76: required from 'void std::__
push_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _Ran
domAccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<c
har> >*, std::vector<std::vector<std::basic_string<char> > > >; _Distance = long
long int; _Tp = std::vector<std::basic_string<char> >; _Compare = __gnu_cxx::__
ops::_Iter_comp_val<bool (Inventory::*)(std::vector<std::basic_string<char> >, s
td::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_heap.h:230:51: required from 'void std::__
adjust_heap(_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _R
andomAccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string
<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Distance = lo
ng long int; _Tp = std::vector<std::basic_string<char> >; _Compare = __gnu_cxx::
__ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_string<char> >
, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_heap.h:334:15: required from 'void std::__
make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomA
ccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char>
>*, std::vector<std::vector<std::basic_string<char> > > >; _Compare = __gnu_cxx
::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_string<char>
>, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1673:49: required from 'void std::_
_heap_select(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterator
, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<std::vect
or<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char> >
> >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vect
or<std::basic_string<char> >, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1932:59: required from 'void std::_
_partial_sort(_RandomAccessIterator, _RandomAccessIterator, _RandomAccessIterato
r, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<std::vec
tor<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<char>
> > >; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)(std::vec
tor<std::basic_string<char> >, std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:1947:59: required from 'void std::_
_introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [
with _RandomAccessIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic
_string<char> >*, std::vector<std::vector<std::basic_string<char> > > >; _Size =
long long int; _Compare = __gnu_cxx::__ops::_Iter_comp_iter<bool (Inventory::*)
(std::vector<std::basic_string<char> >, std::vector<std::basic_string<char> >)>]
'
c:mingwincludec++4.9.1bitsstl_algo.h:1969:11: required from 'void std::_
_sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAcces
sIterator = __gnu_cxx::__normal_iterator<std::vector<std::basic_string<char> >*,
std::vector<std::vector<std::basic_string<char> > > >; _Compare = __gnu_cxx::__
ops::_Iter_comp_iter<bool (Inventory::*)(std::vector<std::basic_string<char> >,
std::vector<std::basic_string<char> >)>]'
c:mingwincludec++4.9.1bitsstl_algo.h:4707:78: required from 'void std::s
ort(_RAIter, _RAIter, _Compare) [with _RAIter = __gnu_cxx::__normal_iterator<std
::vector<std::basic_string<char> >*, std::vector<std::vector<std::basic_string<c
har> > > >; _Compare = bool (Inventory::*)(std::vector<std::basic_string<char> >
, std::vector<std::basic_string<char> >)]'
inventory.cpp:45:58: required from here
c:mingwincludec++4.9.1bitspredefined_ops.h:141:37: error: must use '.*' or
'->*' to call pointer-to-member function in '((__gnu_cxx::__ops::_Iter_comp_val
<bool (Inventory::*)(std::vector<std::basic_string<char> >, std::vector<std::bas
ic_string<char> >)>*)this)->__gnu_cxx::__ops::_Iter_comp_val<bool (Inventory::*)
(std::vector<std::basic_string<char> >, std::vector<std::basic_string<char> >)>:
:_M_comp (...)', e.g. '(... ->* ((__gnu_cxx::__ops::_Iter_comp_val<bool (Invento
ry::*)(std::vector<std::basic_string<char> >, std::vector<std::basic_string<char
> >)>*)this)->__gnu_cxx::__ops::_Iter_comp_val<bool (Inventory::*)(std::vector<s
td::basic_string<char> >, std::vector<std::basic_string<char> >)>::_M_comp) (...
)'
{ return bool(_M_comp(*__it, __val)); }
^
我试着寻找答案,但错误太大了。不可能把它归结为可搜索的东西。我不确定可能出了什么问题,因为我并没有使用向量的迭代方法。我唯一的猜测是,我的算法排序方法可能是个问题。
库存:
vector<vector<string> > inventory;
不能像那样使用非static
成员函数作为std::sort
的参数
sort(inventory.begin(), inventory.end(), NameSort);
使NameSort
和IntSort
成为static
成员函数或非成员函数。
在进行此操作时,请将这些函数的参数类型更改为std::vector<std::string> const&
。否则,您将制作许多不必要的std::vector<std::string>
s的副本。
但是,我有一种感觉,inventory
属于std::vector<std::string>>
类型。在这种情况下,这些参数的类型必须是std::string const&
。
相关文章:
- 根据预定义的值生成字符列表
- 如何在 c++ 中按预定义的顺序循环浏览类实例?
- 如何从预定义的数组创建某些元素数组
- 重新定义预定义的 errno 错误消息 (E2BIG)
- 在C++中将(预定义的)原子值添加到矢量
- 有没有办法制作一个 c++ 宏(或类似的东西),它使用户语句被 while 循环的预定义函数包围?
- 如何使用 strcmp 将字符串与预定义字符串进行比较
- 如何为缺少预定义运算符而不扩展命名空间"std"的标准类型定义运算符>> (istream &, ...)?
- 在多个对象中初始化预定义成员变量的正确方法是什么?
- 我们如何在c 中序列化或应对类的对象.是否有任何预定义的库
- vector<T>::p ush_back 用于预定义的构造函数?
- 在main之前调用的预定义函数
- 输入两个整数,并使用预定义函数显示最大数字
- 对大量c++错误输出完全一无所知.我认为这与预定义的函数和迭代器有关
- 如何调用类型为预定义结构的函数
- 是否有预定义的内置函数将数字转换为C++二进制格式
- 如何将C++函数指针(非静态成员函数)传递给预定义的 C 函数
- C++使用预定义参数调用静态函数指针
- 使用预定义字符串和参数从宏构建的函数名
- __func__ C++11 函数的局部预定义变量,无法编译