0

ユーザー入力に基づいて関数を呼び出そうとしています。私は自分が間違っていることを理解できません。このエラーが発生し続ける

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..
}
4

2 に答える 2

2

sort関数を呼び出す前に、関数を宣言する必要があります。その定義を上に移動するか、前にmain置きます。void sort(std::vector<int>);main

そして、同じことがmergeSort

sort(numbers.begin(), numbers.end());また、呼び出しを、として完全に修飾する必要があります。また、、についてもstd::sort(numbers.begin(), numbers.end());同じcopyですunique。そうでない場合は、「ADL」と呼ばれる技術的な理由で、必要に応じて検索できます。呼び出しは、呼び出している引数(イテレーター)が名前空間のクラスである場合にのみコンパイルされますstd。それらがそうであるかどうかは特定の実装次第であるため、一部のコンパイラでは呼び出しが機能しません。

于 2012-05-26T22:18:03.280 に答える
1

main() の前にソート関数を宣言することについて @steve に同意します。

sort()ここでの問題は、パラメーターを指定して関数を呼び出していることだと思いますが、関数std::vectorの定義では、受け取ったパラメーターのタイプを記述したばかりで、変数の名前も記述する必要があります。例えば。

void sort(std::vector<int> <variable_name>) { //definition }

もう 1 つ指摘しておきたいのは、ベクトルをnumberグローバルに宣言したので、 like を呼び出す必要がないということです。sort(number)これは、 function がグローバルに定義された vector を自動的に検出するためnumberです。基本的に、ベクトルnumberをグローバルに定義する場合は、関数sort()をパラメーターなしにする必要があります。

スコープもstd::どこでも使用していますが、代わりに s の直後に 1 行追加することができます#include-

using namespace std;

うまくいくことを願っています!

于 2012-06-05T09:57:19.683 に答える