我正在写一个小的递归算法。这是代码:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> coins;
int checkchange(int left) {
vector<int> choices (coins.size());
if (left == 0)
return 0;
else {
int min;
for (int i=0;i<coins.size();i++) {
choices.at(i) = (1 + checkchange(left - coins.at(i)));
}
return min_element(choices.front(),choices.back());
}
}
int main() {
int N;
cin >> N;
for (int i=0;i<N;i++) {
int c,m,temp,change;
cin >> c >> m;
for (int j=0;j<c;j++) {
cin >> temp;
coins.push_back(temp);
}
for (int j=0;j<m;j++) {
cin >> temp;
change = checkchange(temp);
cout << change;
}
}
return 0;
}
我收到以下错误:
在 来自burningcoins.cpp的
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/algorithm:62的文件中:
3:/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/stl_algo.h:
在函数'_FIter std ::min_element(_FIter, _FIter) [with _FIter =
int]':burningcoins.cpp:19:从这里实例化
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../.. /../include/c++/4.4.7/bits/stl_algo.h:5998:
错误:“一元*”/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../ 的类型参数
无效../../../include/c++/4.4.7/bits/stl_algo.h:5998:
错误:'一元*'的无效类型参数
我试过用 g++ 和 gcc 编译,都给我同样的错误。我究竟做错了什么?
编辑:
新代码:
int checkchange(int left) {
vector<int> choices (coins.size());
if (left == 0)
return 0;
else {
for (int i=0;i<coins.size();i++) {
choices[i] = (1 + checkchange(left - coins.at(i)));
}
return *min_element(choices.begin(), choices.end());
}
}
新的错误信息:
/tmp/ccV3VLsK.o: 在函数
main': <br/> burningcoins.cpp:(.text+0x16a): undefined reference to
std::
cin'burningcoins.cpp:(.text+0x16f): 未定义引用std::basic_istream<char, std::char_traits<char> >::operator>>(int&)' <br/> burningcoins.cpp:(.text+0x187): undefined reference to
std::
cin'burningcoins.cpp:(.text+0x18c): 未定义引用std::basic_istream<char, std::char_traits<char> >::operator>>(int&)' <br/> burningcoins.cpp:(.text+0x19b): undefined reference to
std:: basic_istream >::operator>>(int&)'
burningcoins.cpp:(.text+0x1b0): 未定义对std::cin' <br/> burningcoins.cpp:(.text+0x1b5): undefined reference to
std::basic_istream >::operator>>(int&)'
burningcoins.cpp:(.text+0x1ec)的引用对std::cin' <br/> burningcoins.cpp:(.text+0x1f1): undefined reference to
std::basic_istream >::operator>>(int&)' 的
未定义引用 burncoins.cpp:(.text+0x208): 对std::cout' <br/> burningcoins.cpp:(.text+0x20d): undefined reference to
std::basic_ostream >::operator<<(int)'
/tmp/ccV3VLsK 的未定义引用。 o:在函数__static_initialization_and_destruction_0(int, int)': <br/> burningcoins.cpp:(.text+0x261): undefined reference to
std::ios_base::Init::Init()'
中burningcoins.cpp:(.text+0x266):未定义的引用std::ios_base::Init::~Init()' <br/> /tmp/ccV3VLsK.o: In function
std::vector >::_M_range_check(unsigned long) const':
burningcoins.cpp:(.text._ZNKSt6vectorIiSaIiEE14_M_range_checkEm[std::vector >::_M_range_check(unsigned long) const]+0x2d):未定义对std::__throw_out_of_range(char const*)' <br/> /tmp/ccV3VLsK.o: In function
std::vector的引用>::_M_insert_aux(__gnu_cxx::__normal_iterator > >, int const&)':
burningcoins.cpp:(.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi[std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator > >, int) : 未定义对__cxa_begin_catch' <br/> burningcoins.cpp:(.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi[std::vector<int, std::allocator<int> >::_M_insert_aux(__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, int const&)]+0x2be): undefined reference to
__cxa_rethrow'burningcoins.cpp
:(.text._ZNSt6vectorIiSaIiEE13_M_insert_auxEN9__gnu_cxx17__normal_iteratorIPiS1_EERKi[std::vector >::_M_insert_aux(__gnu_cxx::__normal_iterator >>, int const&)]+0x2c8) 的引用__cxa_end_catch' <br/> /tmp/ccV3VLsK.o: In function
std::vector >::_M_check_len(unsigned long, char const*) const':
burningcoins.cpp:(.text._ZNKSt6vectorIiSaIiEE12_M_check_lenEmPKc[std::vector >::_M_check_len(unsigned long, char const*) const]+0x4c) : 对std::__throw_length_error(char const*)' <br/> /tmp/ccV3VLsK.o: In function
__gnu_cxx::new_allocator::deallocate(int*, unsigned long)' 的未定义引用:
burningcoins.cpp:(.text._ZN9__gnu_cxx13new_allocatorIiE10deallocateEPim[__gnu_cxx::new_allocator::deallocate(int*, unsigned long)]+0x1c): undefined对operator delete(void*)' <br/> /tmp/ccV3VLsK.o: In function
__gnu_cxx::new_allocator::allocate(unsigned long, void const*)'的引用:
burningcoins.cpp:(.text._ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv[__gnu_cxx::new_allocator::allocate(unsigned long, void const*)]+0x35): undefined引用std::__throw_bad_alloc()' <br/> burningcoins.cpp:(.text._ZN9__gnu_cxx13new_allocatorIiE8allocateEmPKv[__gnu_cxx::new_allocator<int>::allocate(unsigned long, void const*)]+0x45): undefined reference to
运算符 new(unsigned long)'
/tmp/ccV3VLsK.o:(.eh_frame+0x12): undefined reference to__gxx_personality_v0' <br/> /tmp/ccV3VLsK.o:(.eh_frame+0x4f): undefined reference to
__gxx_personality_v0'
collect2: ld 返回 1 exit status