Ir ao conteúdo

Posts recomendados

Postado

Boa noite pessoal!
Estou tentando passar uma matriz do main para o calc.cpp e criei o calc.hpp mas não compila
Alguém manja este procedimento?
desde já agradeço!
seguem os códigos:

usei o dev C++
main.cpp
#include <iostream>
#include "calc.hpp"
using namespace std;

int main(){
    double **vetor;
    int lin = 3;
    int col = 8;
    for ( int i = 0; i < lin; i++ ){
        for ( int j = 0; j < col; j++ ){
            vetor[j] = 3;            
        }        
    }
    calc(vetor, lin,col);  
    
    for ( int i = 0; i < lin; i++ ){
        for ( int j = 0; j < col; j++ ){
            cout<<vetor[j]<<"\t";            
        }    
        cout<<endl;    
    }
}

calc.cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <stdlib.h>
using namespace std;
void calc (double **lista, int & linha, int & coluna) {     // recebe os agumentos
    for ( int i = 0; i < linha; i++ ){
        for ( int j = 0; j < coluna; j++ ){
            lista[j] *= 10;    
        }    
    }

}
calc.hpp
#ifndef CALC_H
#define CALC_H

void calc(double **lista, int & linha, int & coluna);         // protótipo da função

#endif //CALC_H
 

Postado

Boa Noite

Em C, este protótipo ficaria assim veja um exemplo:

void fnArray(int row, int col, int Arr[row][col]);

No seu caso assim:

void calc (int linha, int coluna, void* lista);

Teste em C++, pois em C eu garanto que funciona.:thumbsup:

  • Curtir 1
Postado

Mauro eu rodo aqui no windows sevem com o dev c++ e dá uns erros de @win16?

você sabe o porque disso?

e o problema me parece ser no calc.cpp.

Postado

@cezarvaz kkkkkkkkkk acontece o seguinte: Onde tem assim no arquivo calc.cpp:

int (*arr)[linha][coluna] = (static_cast<int (*)[linha][coluna]>(lista));

Coloque double nos int assim:

double (*arr)[linha][coluna] = (static_cast<double (*)[linha][coluna]>(lista));

veja que a conversão de dados é do genérico (void) para tipo primitivo double

no arquivo que postei eu fiz para int, substitua para double.

execute o comando abaixo para compilar os arquivos C++

onde cd é o caminho para os arquivos

 

promapt:

cd>mingw32-g++ main.cpp calc.cpp -o main.exe

print.png

  • Curtir 1
Postado
1 hora atrás, cezarvaz disse:

Mauro eu rodo aqui no windows sevem com o dev c++ e dá uns erros de @win16?

você sabe o porque disso?

e o problema me parece ser no calc.cpp.

Outra coisa, este Dev C++ não é o melhor IDE

Recomendo o Code Block que é o melhor, se você for bem inciante recomendo um online, ou desative o auto completar.

Assim você vai aprender bem mais.

 

Aproposito já ia esquecendo este erro @win16 é por que o arquivo código não tem função main()

naturalmente por que calc.c é a implementação/ rotina/ ou ainda tarefa.

Compile como indiquei acima que o app vai funcionar.

  • Curtir 1
Postado

deu na trave de novo, olha na figura!

fot1.png

no codeblocks a mesma coisa será que é porque é windows 7 64 bits?

 

agora foi dos dois. Será que é problema com o win 7 64 bits/ no codeblocks dá a mesma coisa!

fot1.png

fot2.png

Postado

É por que não é um projeto, daí o IDE está compilando individualmente, 

Você tem que criar um projeto com os arquivos, ou compilar por linha de comando.

 

 

 

 

 

:tw_lol:

  • Curtir 1
Postado

@cezarvaz na definição da função corrige

colocando:

double (*arr)[linha][coluna] = (static_cast<double (*)[linha][coluna]>(lista));

 

no lugar deste:

int (*arr)[linha][coluna] = (static_cast<int (*)[linha][coluna]>(lista));

:thumbsup:

  • Curtir 1
Postado

Pessoal, me deparei com um problema implantando o caso de passagem, na linha em evidencia, me parece faltar alguma coisa pois parece entrar em looping?

Desde já agradeço a ajuda!!!!

 

#include <stdio.h>
#include <math.h>
#include <conio.h>
#include "ReadTable.hpp"

using namespace std;

void ReadTable(int linhas, int colunas, void* Reg) {
    
    double (*Dat)[linhas][colunas] = static_cast<double (*)[linhas][colunas]>(Reg);
    
    //leitura do arquivo de dados Data1.txt
    ifstream ArqIn("Warehouse/Data1.txt");
    
    //ArqOut de Gravação
    ofstream ArqOut;
    ArqOut.open("Warehouse/Report.txt");

    //Teste de IO
    if ((!ArqIn )){ 
        cerr << "ArqOut falhou! Erro de I/O" << "\n"<< std::endl;
        system("pause");
    }        
    //ArqOut<<linhas<<" "<<colunas<<"\n";        
    //Leitura do arquivo Data1.txt e gravação em matriz string
    string lineV;
    int col = 0;
    int lin = 0;    
    while( getline( ArqIn, lineV ) ){
        istringstream iss( lineV );
        string result;
        while( getline( iss, result, ' ' ) ){
            double dado = atof(result.c_str());
            (*Dat)[lin][col] = dado;
            cout<<(*Dat)[lin][col]<<"\t";
            col++;
        }
        cout<<endl;
    lin++;    
    col = 0;
    }
    
   //getch();
       
   //libera a memória
    //for(int i=0;i<lin;i++){delete Dat;} delete []Dat;
}

Visitante
Este tópico está impedido de receber novas respostas.

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!