Ответ 1
Оба std::string
и std::vector<T>
имеют конструкторы, инициализирующие пустой объект. Вы можете использовать std::vector<unsigned char>()
, но я бы удалил инициализатор.
У меня есть struct
:
typedef struct user {
string username;
vector<unsigned char> userpassword;
} user_t;
Мне нужно инициализировать userpassword
пустым vector
:
struct user r={"",?};
Что я должен поставить вместо ?
?
Оба std::string
и std::vector<T>
имеют конструкторы, инициализирующие пустой объект. Вы можете использовать std::vector<unsigned char>()
, но я бы удалил инициализатор.
Вот так:
#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
// ...
}
Как насчет
user r = {"",{}};
или
user r = {"",{'\0'}};
или
user r = {"",std::vector<unsigned char>()};
или
user r;
Векторный конструктор по умолчанию создаст пустой вектор. Таким образом, вы должны иметь возможность написать:
struct user r = { string(), vector<unsigned char>() };
Примечание. Я также использовал конструктор строк по умолчанию вместо "".
Возможно, вам стоит подумать о том, чтобы сделать пользователя классом и добавить конструктор по умолчанию, который делает это для вас:
class User {
User() {}
string username;
vector<unsigned char> password;
};
Тогда просто напишите:
User r;
приведет к правильно инициализированному пользователю.