Ir para conteúdo
Fórum Script Brasil
  • 0

Passar um vetor de uma struct para uma função por referência


Pablosk8

Pergunta

Pessoal,

Estou fazendo um trabalho de faculdade onde tenho que criar uma struct e depois um vetor de 100 posições desta struct. Posteriormente tenho funções que precisam acessar este vetor criado da struct.

Pesquisei na internet uma forma de, criar este vetor dentro do MAIN e passá-lo para a função. Tem uma forma bem simples, mas e passando por valor, o que não resolve. Ai tentei passá-lo por referência, mas não consegui.

Fiz um código que, no DEV C++ da o seguinte erro:

[Linker error] undefined reference to `novo_nome(int*, cadastro*)'

ld returned 1 exit status

E no Visual Studio 2003 ele até compila, mas na hora de executar não funciona direito.

Este é o código:

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string>

using namespace std;

int novo_nome(int *,struct cadastro*);

struct end{
    char rua[20];
    int numero;
    char bairro[10];
    char cidade[10];
};

struct cadastro{
    char nome[30];
    struct end endereco;
    char fone[10];
    long int cep;
};

int main( )
{
    struct cadastro nomes[100];

    cout<<"MENU DE OPCOES";
    cout<<"\n1-Entrar com um novo nome";
    cout<<"\n2-Imprimir na tela os dados de uma das pessoas";
    cout<<"\n3-Imprimir uma lista de nomes que começas por uma letra informada";
    cout<<"\n4-Fim do programa" <<endl;

    int cont_nomes=0;

    novo_nome(&cont_nomes,&nomes[100]);

    system ("PAUSE");
    return 0;
}

//Função para o cadastro de um novo nome
int novo_nome(int *cont,struct cadastro *contatos[100]){
    bool sair=true;
    char escolha;
    if (*cont == 100){
        cout<<"\nAtingido o máximo de cadastros!";
        return 0;
    }
    while (*cont < 100 && sair){
        cout<<"Informe os dados do contato" <<endl;
        cout<<"Nome: ";
        gets(contatos[*cont]->nome);
        cout<<"Endereco" <<endl;
        cout<<"Rua: ";
        gets(contatos[*cont]->endereco.rua);
        cout<<"Numero: ";
        cin>>contatos[*cont]->endereco.numero;
        fflush(stdin);
        cout<<"Bairro: ";
        gets(contatos[*cont]->endereco.bairro);
        cout<<"Cidade: ";
        gets(contatos[*cont]->endereco.cidade);
        cout<<"Telefone: ";
        gets(contatos[*cont]->fone);
        cout<<"CEP: ";
        cin>>contatos[*cont]->cep;
        fflush(stdin);
        *cont+=1;
        
        cout<<"Tecle S para sair ou qualquer tecla para continuar cadastrando.";
        cin>>escolha;
        fflush(stdin);
        cout<<endl;
        if (escolha == 's' || escolha == 'S')
           sair=false;

        

    }
    return 0;
}

Se alguém puder me ajudar, ficarei muito grato!!!

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

cara da uma olhada aqui:

int novo_nome(int *cont,struct cadastro *contatos[100]){
esse segundo parametro é um array de pontero. se você cria um array de struct, não da pra passar pra um array de pontero de struct. alias, nem sei se você pode definir tamanho de array em parametro, acho q esse 100 ai não compilaria nunca. tenta fazer assim:
int novo_nome(int *cont,struct cadastro *contatos){
mas veja q já tem otros erros:
novo_nome(&cont_nomes,&nomes[100]);
porque esse 100 ai de novo?? você quer passar o array todo ou só um indice?? e mesmo no codigo dentro da funcao:
gets(contatos[*cont]->nome);
ou você acessa o indice q você quer assim:
gets(contatos[*cont].nome);
ou se você já ta passando o indice q você quer, ai você faz assim:
gets(contatos->nome);

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...