2017-10-04 33 views
-3

有兩個功能:如何調用重載函數中的函數

#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)); 
} 

但是,當我嘗試從功能vector<string> func1(vector<string> name1)調用函數string func1(string name1)我得到一個錯誤:

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

可能是什麼問題?

+3

我希望看到一個SSCCE。你也不能從想返回int的函數返回int []。事實上,當我創建一個獨立的示例時,[完全無法重現](http://coliru.stacked-crooked.com/a/ee09eb4194507405)。 –

+1

請嘗試創建一個[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)向我們展示。除了語法等明顯的錯誤之外,行爲不應該是你聲稱的行爲。 –

+2

第二個函數不會編譯。返回類型是「int」,但是它返回一個指向局部變量的指針('out')。而'int out []'在C++中是一個無效的聲明。 – Peter

回答

0

有在你的代碼兩個不同的問題:

  1. func1(vector<string>)你叫func1(string),但尚未定義的功能。要解決此問題,您可以在vector<string> func1(vector<string> name1)之前放置函數原型string func1(string name1);,或者可以在vector<string> func1(vector<string> name1)之前放置整個func1(string)函數。

  2. in main()你叫vector_out.push_back(func1(vector_in));func1這裏是func1(vector<string>)函數,但是這個函數的返回類型是vector<string>。現在你打電話vector_out.push_back與一個參數是不是stringvector<string>沒有這樣的功能。

您仍然需要澄清問題並指定vector_out最後應包含的內容。