Ir ao conteúdo
  • Cadastre-se

C++ Error \226 e no match for 'operator=' (operand types are 'HASH' {aka 'reg'} and


Posts recomendados

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define TAM_MAX 7

struct reg {
    int item;
    int ocupado;
};
typedef struct reg HASH;

int funcaohash(int);
void inicializa(HASH []);
void insere(HASH [], int);
int busca(HASH [], int);
void apaga(HASH [], int);
void imprime(HASH []);
int cheia(HASH []);

int hash1(int chave) {
    return abs(chave) % TAM_MAX;
}
int hash2(int chave) {
 return (abs(chave)*2) % TAM_MAX; /* o valor da função */
}

void inicializa(HASH tabHash[]) {
    int i;
    for(i=0; i<TAM_MAX; i++)
        tabHash[i].ocupado = 0; // falso
}

int insere(HASH tabHash[], int chave) {
 int i = hash1(chave);
 int k = hash2(chave);
 int cont = 0;
 /* procura a próxima posição livre */
 while (tabHash[i] != -1) {
 if (tabHash[i] == chave) return –1; /* valor já existente na tabela */
 if (++cont == TAM_MAX) return –2; /* tabela cheia */
 i = (i + k) % TAM_MAX; /* tabela circular */
 }
 /* achamos uma posição livre */
 tabHash[i] = chave;
 return i;
}

// Retorna -1 se não encontrou ou a posição caso encontre o item
int busca(HASH tabHash[], int chave) { // Recuperando um elemento
 int i = hash1(chave);
 int k = hash2(chave);
 int cont = 0 ;
 /* procura x a partir da posição i */
 while (tabHash[i] != chave) {
 if (tabHash[i] == -1) return –1; /* não achou x, pois há uma vazia */
 if (++cont == TAM_MAX) return –2; /* a tabela está cheia */
 i = (i + k) % TAM_MAX; /* tabela circular */
 }
 /* encontrou */
 return i;
}

void apaga(HASH tabHash[], int chave) {
    int pos = busca(tabHash,chave);
    if (pos!=-1) {
        tabHash[pos].ocupado=0;
        printf("-> Dados HASH[%d] apagados",pos);
    }
    else printf("Item não encontrado");
}

void imprime(HASH tabHash[]) {
    int i;
    for (i=0; i<TAM_MAX; i++)
        if( tabHash[i].ocupado == 1)
            printf("\nCampo [%d] = %.2f",i,tabHash[i].item);
}

int cheia(HASH tabHash[]) {
    int i, qtde=0;
    for (i=0; i<TAM_MAX; i++)
        if( tabHash[i].ocupado == 1)
            qtde++;
    if (qtde == TAM_MAX) return 1;
    else return 0;
}


main() {
    int i, pos;
    HASH tab[TAM_MAX]; // criando tabela na memoria
    float item;
    inicializa(tab);

    // Inserindo elementos (USUARIO)
    printf("\n*************************************************************\n");
     printf("Tabela HASH com tratamento de colisoes linear (7 itens reais)");
    printf("\n*************************************************************");
    int c;
    while (1) {
      printf("\nDigite uma opcao\n");
      printf("[1]Inserir elemento na tabela\n[2]Procurar elemento na tabela\n[3]Deletar elemento na tabela\n[4]Imprimir\n[5]Sair\n\n");
      scanf("%d",c);
        switch(c) {
         case 1:
            printf("Informe o elemento a ser inserido: ");
            scanf("%f",&item);
            insere(tab,item);
            break;


    case 2:
            printf("\nForneca o item: ");
    scanf("%f",&item);
    pos=busca(tab,item);
    if (pos!=-1)
        printf("Item %.2f encontrado na posicao %d", tab[pos].item,pos);
    else printf("Item não encontrado");
    break;

    case 3:
    printf("\n\Informe o item a ser deletado ");
    scanf("%f",&item);
    apaga(tab,item);
    break;

    case 4:
    printf("\n\nImprimindo conteudo");
    imprime(tab);

    break;
         case 5:
            exit(1);
         default:
            printf("\nEsta opcao não existe. \n");
      }


}

}
 

Link para o comentário
Compartilhar em outros sites

@Diogo Moreira Franco  então tire aquele #include de lá... Não vai compilar assim

 

E devida se insere() retorna void ou int.

 

HASH pode ser anônima. Não precisa de reg....

 

struct reg
{
    int item;
    int ocupado;
};
typedef struct reg HASH;

 

Devia ser

 

typdef struct
{
    int item;
    int ocupado;

}   HASH;

 

Isso

 

    while (tabHash[i] != -1)
    {
        if (tabHash[i] == chave)

 

está errado. tabHash é HASH[] e não pode comparar com -1.....

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...