2012-05-26 5 views
0

사용자 입력을 기반으로 함수를 호출하려고합니다. 나는 내가 뭘 잘못하고 있는지 파악할 수 없다. 이 오류가 계속 발생합니다.사용자 입력을 기반으로 정렬 또는 병합합니다.

error: no matching function for call to 'sort(std::vector<int, std::allocator<int> >&)' 

누군가 내가 잘못하고있는 것을 말해 줄 수 있습니까? 제가 C++을 처음 접했을 때 철저히 제안 해주십시오. 당신은 당신이 그것을 호출하기 전에 sort 함수를 선언 할 필요가

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

답변

2

: 여기 내 코드입니다. 정의를 main 위로 옮기거나 void sort(std::vector<int>);main 앞에 입력하십시오.

mergeSort에 대해서도 마찬가지입니다.

전화 번호 sort(numbers.begin(), numbers.end());std::sort(numbers.begin(), numbers.end());으로, copy, unique으로도 완전하게 한정해야합니다. 만약 당신이 원한다면 당신이 찾을 수있는 "ADL"이라고 불리는 기술적 인 이유 때문에, 당신이 호출하는 인자 (iterators)가 네임 스페이스 std에있는 클래스 인 경우에만 호출이 컴파일됩니다. 특정 구현 여부에 달려 있습니다. 따라서 일부 컴파일러에서는 호출이 작동하지 않습니다.

+0

너무 간단해서 거의 당황 스럽네요. 팁 주셔서 감사합니다! 확실히 이러한 변화를 일으킬 것입니다. – Jmh2013

1

main() 전에 sort 함수를 선언 할 때 @steve에 동의합니다.

여기서 문제는 std::vector이라는 매개 변수를 사용하여 sort() 함수를 호출하는 것입니다. 그러나 방금받은 매개 변수의 형식을 작성한 함수의 정의에서 변수의 이름을 작성해야합니다. 예. 내가 지적하고 싶은

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

한가지 더는 벡터 number을 선언 한대로 기능이 자동으로 전역으로 정의 벡터 number를 찾을 수 있기 때문에 전 세계적으로 다음과 같은 sort(number)를 호출 할 필요가 없다는 것입니다. 따라서 기본적으로 벡터 number을 전역으로 정의하려면 sort() 함수에 매개 변수가 없어야합니다.

당신은 대신 그냥 바로 #include의 후 한 줄을 추가 할 수 있습니다, 사방 범위 std::를 사용했다 -

using namespace std;

나는 그것이 작동하는 희망!

관련 문제