2012-11-17 18 views
12

私はstructを持っている:は、構造体に空のベクトルを初期化する - C++

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

私は空vectoruserpasswordを初期化する必要があります。

struct user r={"",?}; 

私は?の代わりに何を置くべきですか?

+2

「user r;」と言うだけです。 'typedef'は不要です。 – chris

+0

@chris:この方法では、userpasswordには有効なヌル終了C文字列が含まれません。 – SigTerm

+0

コードがあるだけです...もっと値があります。私は適切な値で初期化する必要があります。 – Tomasz

答えて

16

std::stringstd::vector<T>の両方に、オブジェクトを空にするコンストラクタがあります。 std::vector<unsigned char>()を使用することができますが、初期化子を削除します。

7

どの程度

user r = {"",{}}; 

または

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

または

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

または

user r; 
+1

第1幕は鳴らされず、第3幕は魅力のように機能します:)ありがとう – Tomasz

+0

@Tomasz、最初と2番目はC++ 11です。最後は3番目と同じですが、はるかに短くて読みやすくなります。 – chris

8

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

デフォルトのベクトルコンストラクタは、空のベクトルを作成します。このように、あなたは書くことができるはずです:

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

私はまた、 ""の代わりにデフォルトの文字列コンストラクタも使用しました。あなたはクラスのユーザーを作成し、あなたのためにこれを行い、既定のコンストラクタを追加することを検討することをお勧めします

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

それからちょうど執筆:

User r; 

が正しく初期化されたユーザになります。

+0

デフォルトコンストラクタは必要ありません。 OPがそれを持っている方法、それは同じことを今でもやるでしょう。 – chris

関連する問題