none
Tratar o seguinte erro no retorno da função: illegal use of this type as an expression RRS feed

  • Pergunta

  • No retorno da função, apresenta o seguinte erro: illegal use of this type as an expression. Segue a função:
    nRetorno = PedirCodigoLerProduto(PRODUTO *stProduto,  PRODUTO *vetProdutos);	//Chamar a função que pede o código do produto
    				if(nRetorno == -1)							//Se o retorno é 0 indicar que operador desistiu simplesmente
    				{
    					cout <<"Operador desistiu simplesmente!";
    					break;
    				}

    Onde estou errando?
    quarta-feira, 8 de agosto de 2012 23:42

Respostas

Todas as Respostas

  • Pode postar o código completo?
    quinta-feira, 9 de agosto de 2012 18:28
  • Como peguei DP nesta máteria, estou estudanto os codigos/provas antigas para que eu possa aprender.Aqui esta o .cpp:

    // Linguagem de Programação - Prova B1 - Turma da Noite - 11/04/2012 // FATEC - MC - JCB - Versão 0.0 #include "PontoDeVenda.h" // Função que pede o código do produto e verifica se o produto existe (Está Ativo 'A') // Parâmetros: // Entrada: PRODUTO *ptrBuffer - ponteiro para uma struct de produto para receber o // conteúdo dos dados de um produto se ele estiver ativo // PRODUTO *ptrVetProdutos - endereço do vetor de produtos que está no // chamador da função // Retorno: int - OPERADOR_DESISTIU - operador informou zero no código do produto // indicando que está desistindo // PRODUTO_NAO_EXISTE - produto não está com 'A' - ativo // PRODUTO_EXISTE - produto existe: está com 'A' em ativo int PedirCodigoLerProduto(PRODUTO *ptrBuffer, PRODUTO *ptrVetProdutos) { int i; //indice genérico do { cout << "Código do produto entre 1 e " << QTDE_MAXIMA_PRODUTOS << endl << "Ou zero para desistir: "; cin >> ptrBuffer->nCodProduto; // código sendo digitado diretamente na struct da main } while(ptrBuffer->nCodProduto < 0 || ptrBuffer->nCodProduto > QTDE_MAXIMA_PRODUTOS); // @@@@@<01>@@@@@ // 1. Verificar se o operador desistiu // 1.1 - Retornar o código de retorno devido // 2. Se o operador não desistiu // 2.1 - Verificar se o produto está ativo ('A' em ativo) usando a aritmética de ponteiros // Dica - o endereço do vetor de produtos está sendo passado para esta função // 3. Se o produto está ativo (existe) copiar o conteúdo do vetor no ptrBuffer que foi // passado e retornar: PRODUTO_EXISTE // 3.1 - Caso contrário retornar: PRODUTO_NAO_EXISTE if(ptrBuffer->nCodProduto == OPERADOR_DESISTIU) //Operador desistiu? {//sim, operador desistiu! cout << "O Operador informou zero no código do produto, indicando que está desistindo!"; return OPERADOR_DESISTIU; } else { for(i = 0; i < QTDE_MAXIMA_PRODUTOS; i++) *(ptrVetProdutos + i) = *(ptrVetProdutos + i + 1); if(ptrVetProdutos->cAtivoOuExcluido = true) { memcpy(ptrBuffer,(ptrVetProdutos + 1),sizeof(QTDE_MAXIMA_PRODUTOS)); return PRODUTO_EXISTE; } else { return PRODUTO_NAO_EXISTE; }//if-else }//if-else return 999999; // apenas para não dar erro ?????????????? } void main(void) { int i, // índice genérico nRetorno; // retorno da chamada de função PRODUTO stProduto, // para conter os dados de um produto vetProdutos[QTDE_MAXIMA_PRODUTOS]; // vetor de produtos (Cadastro de produtos em // memória // @@@@@<02>@@@@@ // 1. Digitar o seu nome na variável cNomeAluno // 2. Digitar o seu RA na variável cRA char cOpcao, // opção de escolha do operador cNomeAluno[] = "Clayton Roberto Calixto", // nome do aluno cRA[] = "102.305-5", // RA - do Aluno cWork[100]; // área de trabalho SYSTEMTIME stTime; // struct para buscar data e hora do sistema setlocale(LC_ALL, ("portuguese_brazil")); // para aceitar símbolos gráficos do Brasil // // para tratamento do ponto decimal // cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); // @@@@@<03>@@@@@ // 1. Codificar um loop que inicializa o vetor de produtos indicando que // cada produto não está ativo. for(i = 0; i <= QTDE_MAXIMA_PRODUTOS;i++) { vetProdutos[i + 1].cAtivoOuExcluido = false; //vetor de produtos recebe falso do 0 até a quantidade máxima. }//for //Montagem do cabeçalho e menu do programa while(true) // loop infinito { GetLocalTime(&stTime); // buscar data e hora do sistema // formatar o cabeçalho do menu sprintf(cWork, "\tFATEC-MC LP-Prova_B1 %02d/%02d/%04d %02d:%02d:%02d %s", stTime.wDay, stTime.wMonth, stTime.wYear, stTime.wHour, stTime.wMinute, stTime.wSecond, VERSAO); cout << cWork << endl; cout << "\tAluno: " << cNomeAluno << " RA: " << cRA << endl; cout << "I - Incluir um novo produto" << endl; cout << "E - Excluir um produto existente" << endl; cout << "V - Vender um produto existente" << endl; cout << "M - Mostrar os dados de um produto" << endl; cout << "L - Listar o cadastro de produtos" << endl; cout << "P - Dar entrada no estoque de um produto existente" << endl; cout << "S - Sair do programa" << endl; cout << "\tSelecione: "; cin >> cOpcao; // pegar a opção operador cOpcao = toupper(cOpcao); // converter opção para maiúscula switch(cOpcao) // avaliar a opção escolhida { case INCLUIR_UM_PRODUTO: // @@@@@<04>@@@@@ // 1. Chamar a função que pede o código do produto // 2. Analisar o retorno da função // 2.1 - Se o retorno indicar que operador desistiu simplesmente // sair do switch // 2.2 - Se o retorno indicar que o produto existe, mostrar na tela os // dados do produto (estão na struct) e perguntar se // vai fazer a substituição do produto existente // 2.2.1 - Se o operador informou que vai substituir fazer a inclusão // do produto substituindo o existente // 2.2.2 - Se o operador informou que não vai substituir, simplesmente // sair fora do switch // 2.3 - Se o produto não existe (Não 'A' ativo) fazer a inclusão: // 2.3.1 - Pedir o nome do produto considerando que tem brancos no nome // 2.3.2 - Pedir o valor unitário // 2.3.3 - Pedir a quantidade em estoque // 2.3.4 - Informar que o produto está ativo // 2.3.5 - Zerar a quantidade entrada e saída // 2.3.6 - Copiar os dados do produto que estão na struct para o vetor // se estiver informando os dados para a struct e não diretamente // para o vetor... nRetorno = PedirCodigoLerProduto(PRODUTO *stProduto, PRODUTO *vetProdutos); //Chamar a função que pede o código do produto if(nRetorno == -1) //Se o retorno é 0 indicar que operador desistiu simplesmente { cout <<"Operador desistiu simplesmente!"; break; } if(nRetorno == 1) //O Produto existe? {//sim, ele existe! cout << "Código do Produto: " << stProduto.nCodProduto << endl; //código do produto cout << "Nome do Produto: " << stProduto.cNomeProduto << endl; // descrição do produto cout << "Status do Produto: " << stProduto.cAtivoOuExcluido << endl; // 'A' - ativo, 'E' - excluido cout << "Valor do Produto: " << stProduto.dValorUnitario << endl; // valor unitário do produto cout << "Quant. em Estoque: " << stProduto.dQtdeEstoque << endl; // quantidade do produto em estoque cout << "Quant. Total de Entrada: " << stProduto.dQtdeTotalEntrada << endl; // quantidade total acumulada de entrada cout << "Quant. Total de Saída: " << stProduto.dQtdeTotalSaida << endl; // quantidade total acumulada de saída cout << "Deseja substituir os Produtos acima ?('S'- para sim, 'N' - para não: "; cin >> cOpcao; if(cOpcao == 's' || cOpcao == 'S') { cout << "Código do Produto: " << vetProdutos->nCodProduto << endl; //código do produto cout << "Nome do Produto: " << vetProdutos->cNomeProduto << endl; // descrição do produto cout << "Status do Produto: " << vetProdutos->cAtivoOuExcluido << endl; // 'A' - ativo, 'E' - excluido cout << "Valor do Produto: " << vetProdutos->dValorUnitario << endl; // valor unitário do produto cout << "Quant. em Estoque: " << vetProdutos->dQtdeEstoque << endl; // quantidade do produto em estoque cout << "Quant. Total de Entrada: " << vetProdutos->dQtdeTotalEntrada<< endl; // quantidade total acumulada de entrada cout << "Quant. Total de Saída: " << vetProdutos->dQtdeTotalSaida << endl; // quantidade total acumulada de saída } else { cout <<"Operador não vai substituir!"; break; }//if-else }//if(nRetorno == 1) if(nRetorno == 0 || stProduto.cAtivoOuExcluido == false) //O Produto não existe? {//sim, ele não existe, vamos incluir! cout << "Código do Produto: " << vetProdutos->nCodProduto << endl; //código do produto cout << "Nome do Produto: " << vetProdutos->cNomeProduto << endl; // descrição do produto cout << "Status do Produto: " << vetProdutos->cAtivoOuExcluido << endl; // 'A' - ativo, 'E' - excluido cout << "Valor do Produto: " << vetProdutos->dValorUnitario << endl; // valor unitário do produto cout << "Quant. em Estoque: " << vetProdutos->dQtdeEstoque << endl; // quantidade do produto em estoque cout << "Quant. Total de Entrada: " << vetProdutos->dQtdeTotalEntrada << endl; // quantidade total acumulada de entrada cout << "Quant. Total de Saída: " << vetProdutos->dQtdeTotalSaida<< endl; // quantidade total acumulada de saída }//if(nRetorno == 0 || stProduto.cAtivoOuExcluido == false) break; case EXCLUIR_UM_PRODUTO: // @@@@@<05>@@@@@ // 1. Chamar a função que pede o código do produto // 2. Analisar o retorno da função // 2.1 - Se o retorno indicar que operador desistiu simplesmente // sair do switch // 2.2 - Se o retorno indicar que o produto existe, mostrar na tela os // dados do produto (estão na struct) e perguntar se // vai fazer realmente a exclusão do produto existente // 2.2.1 - Se o operador informou que vai fazer a exclusão // do produto mover 'E' no produto no vetor de produtos // 2.2.2 - Se o operador informou que não vai excluir, simplesmente // sair fora do switch nRetorno = PedirCodigoLerProduto(PRODUTO *stProduto, PRODUTO *vetProdutos); //Chamar a função que pede o código do produto if(nRetorno == -1) //Se o retorno é 0 indicar que operador desistiu simplesmente { cout <<"Operador desistiu simplesmente!"; break; } if(nRetorno == 1) //O produto existe! { cout << "Código do Produto: " << stProduto.nCodProduto << endl; //código do produto cout << "Nome do Produto: " << stProduto.cNomeProduto << endl; // descrição do produto cout << "Status do Produto: " << stProduto.cAtivoOuExcluido << endl; // 'A' - ativo, 'E' - excluido cout << "Valor do Produto: " << stProduto.dValorUnitario << endl; // valor unitário do produto cout << "Quant. em Estoque: " << stProduto.dQtdeEstoque << endl; // quantidade do produto em estoque cout << "Quant. Total de Entrada: " << stProduto.dQtdeTotalEntrada << endl; // quantidade total acumulada de entrada cout << "Quant. Total de Saída: " << stProduto.dQtdeTotalSaida << endl; // quantidade total acumulada de saída cout << "Deseja excluir o Produtos acima ?('S'- para sim, 'N' - para não: "; cin >> cOpcao; if(cOpcao == 's' || cOpcao == 'S') { cout << "Código do Produto: " << endl; //código do produto cin >> vetProdutos[i].nCodProduto; cout << "Nome do Produto: " << endl; // descrição do produto cin >> vetProdutos[i].cNomeProduto; cout << "Status do Produto: " << endl; // 'A' - ativo, 'E' - excluido cin >> vetProdutos[i].cAtivoOuExcluido; cout << "Valor do Produto: " << endl; // valor unitário do produto cin >> vetProdutos[i].dValorUnitario; cout << "Quant. em Estoque: " << endl; // quantidade do produto em estoque cin >> vetProdutos[i].dQtdeEstoque; cout << "Quant. Total de Entrada: " << endl; // quantidade total acumulada de entrada cin >> vetProdutos[i].dQtdeTotalEntrada; cout << "Quant. Total de Saída: " << endl; // quantidade total acumulada de saída cin >> vetProdutos[i].dQtdeTotalSaida; } else { cout <<"Operador não vai excluir!"; break; }//if-else }//if(nRetorno == 1) break; case VENDER_UM_PRODUTO: // @@@@@<06>@@@@@ // 1. Chamar a função que pede o código do produto // 2. Analisar o retorno da função // 2.1 - Se o retorno indicar que operador desistiu simplesmente // sair do switch // 2.2 - Se o retorno indicar que o produto existe, mostrar na tela os // dados do produto... // 3. Pedir a quantidade a vender e verificar se tem no estoque // 3.1 - Se não tiver quantidade suficiente no estoque avisar ao operador e // sair fora do switch // 4. Exibir o valor total da venda (Qtde vendida * preço unitário) // 5. Subtrair do estoque a quantidade vendida (dQtdeEstoque) // Somar na qtde total de saida (dQtdeTotalSaida) // 6. Pausa para o operador poder ver e sair do switch double dQtdeVender; nRetorno = PedirCodigoLerProduto(PRODUTO *stProduto, PRODUTO *vetProdutos); //Chamar a função que pede o código do produto if(nRetorno == -1) //Se o retorno é 0 indicar que operador desistiu simplesmente { cout <<"Operador desistiu simplesmente!"; break; } if(nRetorno == 1) //O produto existe! { cout << "Código do Produto: " << stProduto.nCodProduto << endl; //código do produto cout << "Nome do Produto: " << stProduto.cNomeProduto << endl; // descrição do produto cout << "Status do Produto: " << stProduto.cAtivoOuExcluido << endl; // 'A' - ativo, 'E' - excluido cout << "Valor do Produto: " << stProduto.dValorUnitario << endl; // valor unitário do produto cout << "Quant. em Estoque: " << stProduto.dQtdeEstoque << endl; // quantidade do produto em estoque cout << "Quant. Total de Entrada: " << stProduto.dQtdeTotalEntrada << endl; // quantidade total acumulada de entrada cout << "Quant. Total de Saída: " << stProduto.dQtdeTotalSaida << endl; // quantidade total acumulada de saída cout << "Informe a quantidade a vender:"; cin >> dQtdeVender; if(stProduto.dQtdeEstoque < dQtdeVender ) //Estoque esta menor que pedido? {// sim, não há estoque! cout << "Não há estoque suficiente para a venda!" << endl; } else { stProduto.dQtdeEstoque = - 1; }//if-else }//if break; case MOSTRAR_UM_PRODUTO: // @@@@@<07>@@@@@ // 1. Chamar a função que pede o código do produto // 2. Analisar o retorno da função // 2.1 - Se o retorno indicar que operador desistiu simplesmente // sair do switch // 2.2 - Se o retorno indicar que o produto existe, mostrar na tela os // dados do produto... // 3. Pausa para o operador poder verificar e sair do switch break; case LISTAR_CADASTRO: // @@@@@<08>@@@@@ // 1. Pedir o código do primeiro produto a ser listado ou zero para cancelar // O código do produto deve ser válido. // 2. Listar 5 produtos existentes a partir do informado // 3. Perguntar se vai desistir ou continuar. // 3.1 - Se não vai desistir listar os 5 produtos existentes a seguir e // sair fora do switch se o operador informou que não vai mais continuar break; case DAR_ENTRADA_PRODUTO: // @@@@@<09>@@@@@ // 1. Chamar a função que pede o código do produto // 2. Analisar o retorno da função // 2.1 - Se o retorno indicar que operador desistiu simplesmente // sair do switch // 2.2 - Se o retorno indicar que o produto existe, mostrar na tela os // dados do produto... // 3. Pedir a quantidade a dar entrada (Qtde_Entrada) // 4. Pedir o valor total da entrada (Valor_Total_Entrada) // 5. Calcular o novo preço unitário do produto: // dValorUnitario = ((dQtdeEstoque * dValorUnitario) + Valor_Total_Entrada) / // (dQtdeEstoque + Qtde_Entrada) // 6. Somar Qtde_Entrada em dQtdeEstoque e em dQtdeTotalEntrada break; case SAIR_DO_PROGRAMA: cout << "Vai sair realmente? (S ou N): "; cin >> cOpcao; if(cOpcao == 's' || cOpcao == 'S') return; break; default: cout << "Informar opção válida!" << endl; PAUSA; } // switch } // while (true) } // main

    Aqui esta o .h:

    // Declarações da Prova B1 - 11/04/2012 - Turma da Noite
    #include <iostream>
    #include <windows.h>
    using namespace std;
    
    // Definições
    #define QTDE_MAXIMA_PRODUTOS			2000
    #define PAUSA							system("pause")
    #define LIMPA_TELA						system("cls")
    #define VERSAO							"Versão 0.0"
    
    // Definições do menu
    #define INCLUIR_UM_PRODUTO				'I'
    #define EXCLUIR_UM_PRODUTO				'E'
    #define VENDER_UM_PRODUTO				'V'
    #define MOSTRAR_UM_PRODUTO				'M'
    #define DAR_ENTRADA_PRODUTO				'P'
    #define LISTAR_CADASTRO					'L'
    #define SAIR_DO_PROGRAMA				'S'
    
    // definições dos retornos da função que pede código e lê o produto
    #define OPERADOR_DESISTIU				-1
    #define PRODUTO_NAO_EXISTE				0
    #define PRODUTO_EXISTE					1					
    
    // layout do registro de cada produto
    typedef struct tagPRODUTO
    {
    	int nCodProduto;					// apenas para verificar se a leitura foi OK
    	char cNomeProduto[41],				// descrição do produto
    		cAtivoOuExcluido;				// 'A' - ativo, 'E' - excluido
    	double dValorUnitario,				// valor unitário do produto
    		dQtdeEstoque,					// quantidade do produto em estoque
    		dQtdeTotalEntrada,				// quantidade total acumulada de entrada
    		dQtdeTotalSaida;				// quantidade total acumulada de saida
    } PRODUTO;								// struct do produto
    


    Clayton Roberto Calixto

    quarta-feira, 15 de agosto de 2012 16:49
  • Veja a resposta do Waner na outra pergunta que você criou... chame a função assim:

    nRetorno = PedirCodigoLerProduto(&stProduto, vetProdutos);

    Você não precisa colocar o tipo de dado na chamada à função,isso foi feito umas cinco vezes no seu código.

    • Marcado como Resposta claytoncalixto quarta-feira, 15 de agosto de 2012 22:55
    quarta-feira, 15 de agosto de 2012 19:30
  • Obrigado Vitor, deu certo!

    Até a próxima dúvida/dificuldade!

    Abraços,


    Clayton Roberto Calixto

    quarta-feira, 15 de agosto de 2012 23:17