C/C++

Массив объектов С++

Хотел сделать код для регистрации безлимитного числа пользователей и дальнейшего логина через консоль. Пользователя с полями логин и пароль и сеттером для них я сделал через класс. Возникло 2 проблемы. Я не знаю, как сделать, чтобы объекты создавались столько раз, сколько пользователь зарегистрируется. Хотел сделать через массив с максимальным числом пользователей 32, но массив не создаётся. Компилятор не принимает класс User как тип данных для массива и считает, что это 2 отдельные строки, а на первой я случайно пропустил ;
я уверен, что ошибка в синтаксисе 5 строки, на всякий скинул ещё код класса, если нужен будет остальной код, скину.
#include <iostream>
#include <string>
using namespace std;
int count1 = 0;
User users[32]; //место с 2 ошибками. Ошибка C4430 отсутствует спецификатор типа - предполагается int. Ошибка C2146 синтаксическая ошибка : отсутствие ";" перед идентификатором "users"

class User
{
private:
string login, password;
public:
void Setter(string login, string password) {
this->login = login;
this->password = password;
}
User()
{

}


};
Ошибка, которую вы получаете, указывает на то, что компилятор не может распознать тип данных User. Это происходит потому, что вы объявили массив users до того, как объявили сам класс User. Чтобы исправить эту ошибку, переместите объявление массива users после объявления класса User. Следовательно, компилятор сможет распознать тип данных User и создать массив объектов этого класса.
Также обратите внимание, что если вы хотите создавать объекты динамически в зависимости от количества зарегистрированных пользователей, то вам лучше использовать контейнер из стандартной библиотеки C++, например std::vector, вместо статического массива. Это позволит вам добавлять новые объекты в контейнер без ограничения на максимальное количество пользователей.
Денис Исаев
Денис Исаев
25 860
Лучший ответ
 #include  
#include
#include
#include
#include
#include

using namespace std;

class User {
string login;
string password;
void trim(string& line) noexcept {
line = regex_replace(line, regex("[\\t ]+"), " ");
line.erase(0, line.find_first_not_of(" "));
line.erase(line.find_last_not_of(" ") + 1);
}
bool check_login(const string& line)const noexcept {
for (auto ch : line) {
if (ch > 0 && isspace(ch)) {
return false;
}
}
return true;
}
bool check_password(const string& line)const noexcept {
for (auto ch : line) {
if (ch < 0 || isspace(ch)) {
return false;
}
}
return true;
}
friend bool operator==(const User& a, const User& b) noexcept {
return a.login == b.login && a.password == b.password;
}
public:
bool set(string& login, string& password) noexcept {
trim(login);
if (check_login(login)) {
this->login = login;
} else {
return false;
}
trim(password);
if (check_password(password)) {
this->password = password;
} else {
return false;
}
return true;
}
};

class DataBaseUsers {
const static size_t limit = 100;
size_t count;
vector users;
public:
DataBaseUsers() = delete;
DataBaseUsers(const DataBaseUsers&) = delete;
DataBaseUsers(DataBaseUsers&&) = delete;
DataBaseUsers& operator=(const DataBaseUsers&) = delete;
DataBaseUsers& operator=(DataBaseUsers&&) = delete;
explicit DataBaseUsers(size_t length) noexcept : count(0) {
if (!length) length = 1;
if (length > limit) length = limit;
users.resize(length);
}
bool welcome(const User& user)const noexcept {
return find(users.begin(), users.end(), user) != users.end();
}
bool add(const User& user) noexcept {
if (count < users.size()) {
users.push_back(user);
++count;
return true;
}
return false;
}
};
string input(const char* msg) noexcept {
string word;
while (word.empty()) {
cout > word;
cin.ignore(0x1000, '\n');
}
return word;
}

int main() {
constexpr size_t length = 30;
DataBaseUsers users_db(length);
puts("Registration:");
auto login = input("Login: ");
auto password = input("Password: ");
User user;
if (user.set(login, password)) {
users_db.add(user);
}
while (true) {
puts("Admission: ");
auto login = input("Login: ");
auto password = input("Password: ");
user.set(login, password);
if (users_db.welcome(user)) {
break;
} else {
puts("User not registered!");
}
}
puts("Welcome!");
}