Vector problem in C++

Asked

Viewed 43 times

0

I’m doing a code to create password and user, of course saving them. But in this part of the program it does not work, it gives error.

void criar_senha(){
cout << "Digite a senha usando letras maiúsculas\n";
string nova_senha;
cin >> nova_senha;
vector<string> lista_senha = le_arquivo_login();
lista_senha.push_back(nova_senha);
salva_arquivo_senha(lista_senha);

Specifically it is giving error in the 5 line, of the vector and I did not understand the error

Error:

error: conversation from 'void' to non-scalar type 'std::vector<std::_cxxll::basic::string<char> >' requested;

I know it’s really messy, I’m a beginner and I haven’t finished codico, I need it working to continue.

Whole Code(Yes, you have 2 of the above Code with the same error)

#include <iostream>
#include <vector>
#include <fstream>
using namespace std;

const string cadastro_usuario = "teste_usuario";
const string cadastro_senha = "teste_senha";
string usuario;
string senha;
char tem_conta;


void apresentacao(){
     cout << "*************************************\n";
     cout << "** Bem-vindos ao criador de conta! **\n";
     cout << "*************************************\n";
     cout << endl << endl;
}
void le_arquivo_senha(){
     ifstream arquivo_senha;
     arquivo_senha.open("senha.txt");
     int quantidade;
     arquivo_senha >> quantidade;
}

void le_arquivo_login(){
     ifstream arquivo_login;
     arquivo_login.open("login.txt");
     int quantidade;
     arquivo_login >> quantidade;
}

void salva_arquivo_senha(vector<string> nova_lista){
    ofstream arquivo_senha;  
    arquivo_senha.open("senha.txt"); 
    if(arquivo_senha.is_open()){   
        arquivo_senha << nova_lista.size() << endl; 

        for(string palavra : nova_lista){
            arquivo_senha << palavra << endl; 
        }
        arquivo_senha.close();
    }else{
        cout << "Não foi possível acessar o banco de palavras.\n";
        exit(0);
    }}

void salva_arquivo_login(vector<string> nova_lista){
    ofstream arquivo_login;  
    arquivo_login.open("login.txt"); 
    if(arquivo_login.is_open()){   
        arquivo_login << nova_lista.size() << endl; 

        for(string palavra : nova_lista){
            arquivo_login << palavra << endl;  
        }
        arquivo_login.close();
    }else{
        cout << "Não foi possível acessar o banco de palavras.\n";
        exit(0);
    }}
    
void criar_login(){
    cout << "Digite o login usando letras maiúsculas\n";
    string novo_login;                                       
    cin >> novo_login;                                       
    vector<string> lista_login = le_arquivo_login();        
    lista_login.push_back(novo_login);                     
    salva_arquivo_login(lista_login);
}

void criar_senha(){
    cout << "Digite a senha usando letras maiúsculas\n";
    string nova_senha;
    cin >> nova_senha;
    vector<string> lista_senha = le_arquivo_login();
    lista_senha.push_back(nova_senha);
    salva_arquivo_senha(lista_senha);
}
void login(){
    cout << "Usuario : ";
    cin >> usuario;
    cout << "Senha : ";
    cin >> senha;
    cout << endl;
}

bool conferida;
void conferir_se_esta_certo(){
        if(usuario != cadastro_usuario || senha != cadastro_senha){
        cout << "O usuario ou a senha está(ão) errado(s).\n";
        conferida = false;
        }else{
        cout << "OK, você acertou! Entre-\n";
        conferida = true;
        }}

int main()
{
        setlocale(LC_ALL,"portuguese");
        apresentacao();

        cout << "Você já tem uma conta? (S/N)\n";
        cin >> tem_conta;
          if (tem_conta == 'N'){
          criar_login();
          criar_senha();
          }else{
          login();
          }

          conferir_se_esta_certo();
          if(conferida == true){
                cout << "Entrar(teste)\n";
          }

}

Thank you all very much!!!

1 answer

0


You are trying to assign a variable a different type than what you set for it. This happens in this command:

vector<string> lista_senha = le_arquivo_login();

The variable list_login is the type vector<string> and its function le_arquivo_login returns a type void. To fix this you will need is in function le_arquivo_login and do something like that:

vector<string> le_arquivo_login(){
    ifstream arquivo_login;
    arquivo_login.open("login.txt");
    int quantidade;
    arquivo_login >> quantidade;
    vector<string> lista_senhas;
    // Aqui vc vai precisar fazer um processamento para
    // tranformar o que existe no seu arquivo e atribuir 
    // a variável lista_senhas. Por último você retorna
    // essa variável
    return lista_senhas;
}

This will solve your problem but will require you to do the necessary processing to convert your file data into one vector<string>.

  • 1

    Thank you so much Leandro!!! I help A LOT!! I needed this to continue the Code and my walk in learning C++

Browser other questions tagged

You are not signed in. Login or sign up in order to post.