2016-10-02 5 views
1

ich dieses Programm geschrieben haben:Was sollte das Standardargument (falls vorhanden) sein, wenn ein Vektor an eine Funktion übergeben wird?

#include<iostream> 
#include<vector> 
#include<algorithm> 
#include<cstring> 
using namespace std; 

void permute(char a[],int i=0, vector<string> &vs){ 
if(a[i]=='\0'){ 
    //cout<<a<<endl; 
    string s(a); 
    vs.push_back(s); 
    return; 
} 

for(int j=i;a[j]!='\0';j++){ 
    swap(a[i],a[j]); 
    permute(a,i+1,vs); 
    swap(a[i],a[j]); 
    } 
} 


int main() 
{ 
char a[25] ; 
cin>>a; 
vector<string> vs; 

permute (a,0,vs) ; 

sort(vs.begin(),vs.end()); 

for(int j=0;j<vs.size();j++) 
    { 
    cout<<vs[j]<<endl; 
    } 

    return 0; 
} 

Die complier sagt „Standardargument 3 void permute für Parameter fehlt() Ich weiß nicht, wie man einen Standardwert auf den Vektor geben vs, dass ich vorbei bin. Bitte helfen

+2

Wenn Sie die Argumentreihenfolge so ändern, dass 'vs' vor' i' steht (was * einen * hat), müssen Sie keinen Standard für 'vs' definieren. –

+1

Das Problem ist, dass Ihr 'std :: vector' Argument nach einem Argument mit einem Standardwert (in Ihrem Fall 'int i = 0'). Sobald ein Argument einen Standardwert hat, benötigen alle folgenden Argumente ebenfalls einen Standardwert. In Ihrem Fall könnten Sie auch einfach den leeren Vektor (d. H. '{}') Als Standard verwenden. – Corristo

+0

@Corristo _ "Sie könnten auch einfach den leeren Vektor verwenden (d. H. {})" _ Nein, das funktioniert nicht mit einem Referenzparameter. –

Antwort

0

ein Standardwert kann nur für den letzten Satz von Parametern an eine Funktion angegeben werden:

void permute(char a[],int i=0, vector<string> &vs){ 

Hier wird ein Standardwert für die zweite von dre vorgesehen Die Parameter. Wenn für den 2. Parameter ein Standardwert angegeben ist, muss einer auch für den dritten Parameter angegeben werden. Auf einen Parameter mit einem Standardwert kann kein Parameter ohne einen Standardwert folgen.

In diesem Fall sieht es jedoch so aus, als ob der Standardwert überhaupt nicht benötigt wird, also entfernen Sie ihn einfach.

2

Sobald Sie einen Standardwert für einen Parameter angegeben haben, müssen Sie einen für alle folgenden Parameter angeben.

So ändern Sie einfach die Reihenfolge der Parameter:

void permute(char a[], vector<string> &vs,int i=0){ 

Für einen vector<string> & Parameter, kann man nicht wirklich einen vernünftigen Standardwert übergeben, sondern eine globale Referenz oder so.

+0

@Fanael THX für die Bearbeitung, muss etwas mit dem Kopieren falsch sein. –

Verwandte Themen