2015-01-28 4 views
0

제목과 마찬가지로 C++에서 메서드를 호출하는 데 문제가 있습니다. 나는 혼자서 그것을 풀려고 노력했다. 그래서 나는 여기에서 질문을 게시하기로 결정했다.오류 C2782 : 템플릿 매개 변수 초기화가 모호합니다. C++ 메서드 호출

그래서 누군가 내가 뭘 잘못하고 있는지 말해 줄 수 있습니까? 미리 감사드립니다!

내 코드 :

#include "stdafx.h" 
#include <iostream> 
#include <string> 
using namespace std; 

int counter; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    // START_CONFIG 
    string naam = "XX";     //student naam. 
    string klas = "XX";     //student klas. 
    string studentNummer = "XX";  //student nummer. 
    int min_nummer = 5;      //minimale aantal getallen. 
    int max_nummer = 25;     //maximale aantal getallen. 
    int min_random_nummer = 0;    //minimale getal van de random getallen. 
    int max_random_nummer = 9;    //maximale getal van de random getallen. 
    // END_CONFIG 

    // stap 1. (Print naam, klas en student nummer) 
    cout << "Naam: " << naam << "\n"; 
    cout << "Klas: " << klas << "\n"; 
    cout << "Student Nummer: " << studentNummer << "\n"; 
    cout << "\n \n"; 

    // stap 2. (Vraag de gebruiker om het aantal getallen en lees dit) 
    int aantal; 
    cout << "Met hoeveel getallen wilt u spelen? \n Kiest u alstublieft een getal tussen " << min_nummer << " en de " << max_nummer << ": \n"; 
    cin >> aantal; 
    cout << "\n"; 
    while (aantal < min_nummer || aantal > max_nummer) { 
     cout << "Dit is een foutief getal, kiest u alstublieft een getal tussen de " << min_nummer << " en de "<< max_nummer << ": \n"; 
     cin >> aantal; 
     cout << "\n"; 
    } 

    // stap 3 en 4. (Maak een array aan voor de getallen en vul deze met random getallen) 
    int getallenArray[26]; 
    for (int i = 1; i <= aantal; i++) { 
     int randomNumber = rand() % max_random_nummer + min_random_nummer; 
     getallenArray[i] = randomNumber; 
    } 

    // stap 5. (Print de getallen uit de array op 1 regel) 
    for (int i = 1; i <= aantal; i++) { 
     cout << "nr " << i << " random number " << getallenArray[i] << "\n"; 
    } 

    // stap 6. (Vraag de gebruiker voor welk getal hij wilt zoeken) 
    cout << "Voor welke getal wilt u zoeken? /n Uw kunt alleen kiezen uit getallen van "<< min_random_nummer << " t/m " << max_random_nummer << " \n"; 
    int gezochtGetal; 
    cin >> gezochtGetal; 
    while (gezochtGetal < min_random_nummer || gezochtGetal > max_random_nummer) { 
     cout << "Voor welke getal wilt u zoeken? /n Uw kunt alleen kiezen uit getallen van " << min_random_nummer << " t/m " << max_random_nummer << " \n"; 
     cin >> gezochtGetal; 
    } 

    // stap 8. (roep deze methode aan en print het aantal uit) 
    count(gezochtGetal, getallenArray, 26); 
    cout << "Het getal: " << gezochtGetal << "komt " << counter << "in de array \n"; 

    // stap 9. (bereken welk percenage dit aantal van het totale aantal getallen is. 
    double percentage = (counter/aantal) * 100; 
    cout << "dat betekent dat " << percentage << "% van de getallen in het array gelijk is aan " << gezochtGetal << "\n"; 
} 

// stap 7. (maak een methode) 
int count(int number, int array[], int length){ 
    for (int i = 1; i < length; i++) { 
     if (array[i] == number) { 
      counter++; 
     return counter; 
     } 
    } 
} 

오류 : 아직 선언되지 않았기 때문에

Error 1 error C2782: 'iterator_traits<_Iter>::difference_type std::count(_InIt,_InIt,const _Ty &)' : template parameter '_InIt' is ambiguous c:\users\kaspe_000\documents\visual studio 2013\projects\getal2\getal2\getal2.cpp 59 1 Getal2 
+0

내 의견이 상당히 오프 주제,하지만 당신은 당신이 코드를 작성하는 강제 이상한 사양이 없으면 내가 추측하고있어에서 ... () 독일어는 항상 코드 (변수, 문자열 리터럴 및 주석)를 영어로 작성하십시오. 대부분의 회사에서 그렇게하고 변수, 클래스 등의 의미를 이해할 수 있기 때문에 다른 사람들이 코드를 디버깅하도록 도와줍니다. – dmg

답변

2
count(gezochtGetal, getallenArray, 26); 

이 당신의 count 함수를 호출하지 않습니다.

그러나 대부분의 라이브러리를 전역 네임 스페이스에 덤프하는 데 using을 사용했기 때문에 표준 라이브러리 함수 템플릿 std::count을 호출하려고합니다.

함수를 호출하기 전에 선언해야합니다. 하나 main의 그 전에 정의를 이동하거나 main 전에 선언을 추가

int count(int number, int array[], int length); 

이런 종류의 충돌을 방지하기 위해 글로벌 네임 스페이스에서 물건을 유지하기 위해 더 좋을 것입니다. using namespace std;을 피하고, 네임 스페이스 안에 자신의 선언을 넣는 것이 이상적입니다.

+0

바로 시도 할 것입니다! 네임 스페이스 표준을 사용하는 유일한 이유는 cin과 cout이 작동하지 않기 때문입니다. – kaspertje15

+0

@ kaspertje15 : 정규화 된 이름 인'std :: cin'과'std :: cout'을 사용하십시오. 또는'std :: cin;을 사용하여 전역 이름 공간으로 전체 이름이 아닌 그 이름 만 가져올 수 있습니다. –

+0

AH 알았어, 고마워! – kaspertje15

0

문제는 자신의 count 메소드를 호출하지 않고 C++ 표준 라이브러리에 정의 된 것을 호출하는 것입니다. main에 count 메소드 선언을 넣어야합니다. 나는 이런 식으로 할 것 :

#include "stdafx.h" 
#include <iostream> 
#include <string> 
using std::cin; 
using std::cout; 
using std::endl; 
using std::string; 

int counter; 

int count(int number, int array[], int length); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

...

+0

감사합니다! 변수 백분율이 0 인 이유를 말씀해 주시겠습니까? 카운터와 aantal 모두 값을 가지고 있지만 프로그램은 나에게 퍼센트를 계산하지 않습니다. – kaspertje15

+0

@ kaspertje15 먼저 정수 나누기를 사용하고 나중에 캐스팅하기 때문입니다. 즉, '5/100'은 '0'과 같습니다. 반면에'double (5)/100 == 0.05'. – dmg

+0

아하 이런. 감사! 나는 변수를 곱한다. (counter * 1.0)/(aantal * 1.0) 이제는 매력을 느낀다. – kaspertje15