2012-11-17 11 views
12

Ich habe eine struct:initialisieren leerer Vektor in Struktur - C++

typedef struct user { 
    string username; 
    vector<unsigned char> userpassword; 
} user_t; 

Ich brauche userpassword mit einer leeren vector initialisieren:

struct user r={"",?}; 

Was soll ich statt ? setzen?

+2

Sagen Sie einfach 'user r;'. Und der 'typedef' ist unnötig. – chris

+0

@chris: Auf diese Weise enthält userpassword keine gültige nullterminierte C-Zeichenfolge. – SigTerm

+0

Code ist nur zum Beispiel ... es wird mehr Werte geben, die ich mit den richtigen Werten – Tomasz

Antwort

16

Sowohl std::string als auch std::vector<T> haben Konstruktoren, die das Objekt initialisieren, um leer zu sein. Sie könnten std::vector<unsigned char>() verwenden, aber ich würde den Initialisierer entfernen.

7

Wie wäre es

user r = {"",{}}; 

oder

user r = {"",{'\0'}}; 

oder

user r = {"",std::vector<unsigned char>()}; 

oder

user r; 
+1

1. wurde nicht geschrieben, knospe der dritte funktioniert wie ein Charme :) Danke – Tomasz

+0

@Tomasz, Die erste und zweite sind C++ 11. Der letzte ist identisch mit dem dritten, aber viel kürzer und besser lesbar. – chris

8

wie thi s:

#include <string> 
#include <vector> 

struct user 
{ 
    std::string username; 
    std::vector<unsigned char> userpassword; 
}; 

int main() 
{ 
    user r; // r.username is "" and r.userpassword is empty 
    // ... 
} 
1

Der Standardvektorkonstruktor erstellt einen leeren Vektor. Als solche sollten Sie in der Lage sein zu schreiben:

struct user r = { string(), vector<unsigned char>() }; 

Hinweis, ich habe auch den Standard-String-Konstruktor anstelle von "" verwendet.

Sie möchten vielleicht eine Klasse machen Benutzer zu betrachten und einen Standard-Konstruktor hinzufügen, die für Sie tut dies:

class User { 
    User() {} 
    string username; 
    vector<unsigned char> password; 
}; 

Dann schreiben gerade:

User r; 

in einem korrekt initialisiert Benutzer führen.

+0

Sie benötigen nicht einmal den Standardkonstruktor. So wie das OP es jetzt hat, wird es immer noch dasselbe tun. – chris

Verwandte Themen