2017-10-04 5 views
-3

Il y a deux fonctions:Comment appeler une fonction à l'intérieur d'une fonction surchargée

#include "stdafx.h" 
#include <string.h> 
#include <vector> 

uning namespace std; 


vector<string> func1(vector<string> name1){ 
    vector<string> out; 

    //do something and call our first function 
    for(int i=0; i<100;i++){  
     out.push_back(func1(name1[i])); 
    } 
    return out; 
} 


string func1(string name1){ 
    string out; 

    //do something 

    return out; 
} 

int main(){ 
vector<string> vector_in; 
vector<string> vector_out; 
//generate text 
for (int i = 0; i < 100; i++) { 
    vector_in.push_back(string("string")); 
} 
for (int i = 0; i < 100; i++) { 
    vector_out.push_back(func1(vector_in)); 
} 

Mais lorsque je tente d'appeler la fonction string func1(string name1) de la fonction vector<string> func1(vector<string> name1) je reçois une erreur:

Error C2664 "std::vector> func1(std::vector>)": it is impossible to convert>argument 1 from "string" to "std::vector,std::allocator<_Ty>>"

Quoi le problème?

+3

J'aimerais voir un SSCCE. De plus, vous ne pouvez pas retourner 'int []' à partir d'une fonction qui veut retourner 'int'. En fait, je [ne peux tout à fait reproduire cela] (http://coliru.stacked-crooked.com/a/ee09eb4194507405) lors de la création d'un exemple autonome. –

+1

Veuillez essayer de créer un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) pour nous montrer. Outre les erreurs évidentes dans la syntaxe, etc., il n'y a aucun moyen que le comportement soit ce que vous prétendez être. –

+2

La deuxième fonction ne serait pas compilée. Le type de retour est 'int', mais il retourne un pointeur vers une variable locale (' out'). Et 'int out []' est une déclaration invalide en C++ dans une fonction. – Peter

Répondre

0

Il y a deux problèmes distincts dans votre code:

  1. à func1(vector<string>) vous appelez func1(string) mais la fonction est pas encore définie. Pour corriger cela, vous pouvez soit mettre le prototype de fonction string func1(string name1); avant vector<string> func1(vector<string> name1) ou vous pouvez mettre toute la fonction func1(string) avant vector<string> func1(vector<string> name1).

  2. dans main() vous appelez vector_out.push_back(func1(vector_in));. La func1 est la fonction func1(vector<string>), mais le type de retour de cette fonction est vector<string>. Maintenant vous appelez vector_out.push_back avec un argument qui n'est pas un string mais un vector<string> et est aucune telle fonction.

Vous devez toujours clarifier la question et spécifier ce que vector_out doit contenir à la fin.