我试图根据用户输入调用一个函数。我无法弄清楚我做错了什么。我一直收到这个错误
error: no matching function for call to 'sort(std::vector<int, std::allocator<int> >&)'
有人可以告诉我我做错了什么。因为我是C ++的新手,请详细解释任何建议。这是我的代码:
#include <iterator>
#include <algorithm>
#include <vector>
#include <fstream>
#include <iostream>
#include <string>
std::ifstream in("");
std::ofstream out("outputfile.txt");
std::vector<int> numbers;
std::string sortType = "";
std::string file = "";
int main()
{
std::cout << "Which type of sort would you like to perform(sort or mergesort)?\n";
std::cin >> sortType;
std::cout << "Which file would you like to sort?\n";
std::cin >> file;
//Check if file exists
if(!in)
{
std::cout << std::endl << "The File is corrupt or does not exist! ";
return 1;
}
// Read all the ints from in:
copy(std::istream_iterator<int>(in), std::istream_iterator<int>(),
std::back_inserter(numbers));
//check if the file has values
if(numbers.empty())
{
std::cout << std::endl << "The file provided is empty!";
return 1;
} else
{
if(file == "sort")
{
sort(numbers);
}else
{
mergeSort();
}
}
}
void sort(std::vector<int>)
{
// Sort the vector:
sort(numbers.begin(), numbers.end());
unique(numbers.begin(), numbers.end());
// Print the vector with tab separators:
copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(std::cout, "\t"));
std::cout << std::endl;
// Write the vector to a text file
copy(numbers.begin(), numbers.end(),
std::ostream_iterator<int>(out, "\t"));
std::cout << std::endl;
}
void mergeSort()
{
//mergesort code..
}
答案 0 :(得分:2)
在调用之前,您需要声明sort
函数。将其定义移至main
之上,或将void sort(std::vector<int>);
置于main
之前。
同样适用于mergeSort
。
您还应该将通话sort(numbers.begin(), numbers.end());
完全限定为std::sort(numbers.begin(), numbers.end());
,copy
,unique
也是如此。如果你不这样做,那么出于技术原因称为“ADL”,如果你愿意可以查找,那么只有当你调用它的参数(迭代器)是名称空间{{1}中的类时,调用才会编译}}。具体实现取决于它们是否存在,因此该调用不适用于某些编译器。
答案 1 :(得分:1)
我同意@steve在main()之前声明sort函数。
我认为这里的问题是你用参数sort()
调用std::vector
函数,但是在你刚编写接收参数类型的函数的定义中,你还应该写一些名字变量。例如。
void sort(std::vector<int> <variable_name>)
{
//definition
}
我想要指出的另一件事是,因为你已经全局声明了向量number
,所以不需要调用类似sort(number)
,因为函数会自动找到全局定义的向量{ {1}}。所以基本上如果你想要全局定义向量number
那么函数number
应该是无参数的。
您到处都使用了范围sort()
,而只需在std::
s之后添加一行 -
#include
我希望它有效!