Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

jak wywołać funkcję w strukturze

Ostatnio zmodyfikowano 2021-11-22 18:45
Autor Wiadomość
nanoant20
Temat założony przez niniejszego użytkownika
jak wywołać funkcję w strukturze
» 2021-11-22 18:25:47
nie wiem jak wywołać funkcję
linijka z którą ma problem
float wynik = data[choice-1].funkcja(temp); <-- how to call functions
poniżej listing

C/C++
#include <iostream>
#include <vector>        
//dla vector
#include <iomanip>       //setw, setfill, setprecision
#include <limits>        //std::numeric_limits
#include <algorithm>     // replace, erase, remove_if
#include <cstring>       // strlen
#include <cmath>         // pow(), fabs()
#include <chrono>
#include <thread>

using namespace std;

typedef struct { int id; string opis; float tmp; float funkcja( float ); char jednostka; } Item;

//deklaracja, prototyp funkcji
float FtoC( float );
float CtoF( float );
int sprawdz_czy_liczba();
void czysc_strumien();
void wykonaj_konwersje( vector < Item >, int );

int main()
{
   
float temp { 0 };
   
vector < Item > data = {
        {
1, "Z Celsjuszy na Fahrenheita", CtoF( temp ), 'F' },
       
{ 2, "Z Fahrenheita na Celsjusze", FtoC( temp ), 'C' }
    }
;
   
   
cout << "Wybierz " << endl;
   
for( auto Item: data )
   
{
       
cout << Item.id << " " << Item.opis << endl;
   
}
   
   
bool infinity = true;
   
for(; infinity; )
   
{
       
cout << "Wybierz dzialanie : ";
       
int choice { sprawdz_czy_liczba() };
       
switch( choice )
       
{
       
case 1:
           
wykonaj_konwersje( data, choice );
           
break;
           
       
case 2:
           
wykonaj_konwersje( data, choice );
           
break;
           
       
case 3:
           
cout << "\n\t\t\tKoniec programu. Bye!";
           
infinity = false;
           
break;
           
       
default:
           
cout << "\tMozesz wybrac tylko od 1 do 3" << "\n\n";
           
break;
       
}
    }
   
   
getchar();
   
return 0;
}

//definicje
float CtoF( float temp )
{
   
return float( temp ) * 9 / 5 + 32;
}
float FtoC( float temp )
{
   
return( float( temp ) - 32 ) * 5 / 9;
}
int sprawdz_czy_liczba()
{
   
int x;
   
while( !( cin >> x ) )
   
{
       
if( cin.fail() )
       
{
           
cout << "\tWprowadzony znak nie jest cyfra/liczba" << endl;
           
cout << "\tProsze podac cyfre : ";
           
//czyscimy strumien wejsciowy std::cin
           
czysc_strumien();
           
continue;
       
}
    }
   
   
return x;
}
void czysc_strumien()
{
   
//czyscimy strumien wejsciowy std::cin
   
cin.clear();
   
cin.ignore( std::numeric_limits < std::streamsize >::max(), '\n' );
}
void wykonaj_konwersje( vector < Item > data, int choice )
{
   
float temp = 0;
   
cout << "Przeliczamy " << data[ choice - 1 ].opis << "\n";
   
cout << "Podaj temperature : ";
   
cin >> temp;
   
//float wynik = data[choice-1].funkcja(temp); <-- how to call functions
    //cout << wynik << " " << data[choice].jednostka << " ";
   
cout << data[ choice - 1 ].jednostka << "\n";
}
P-179079
pekfos
» 2021-11-22 18:37:47
Nie chodziło o wskaźnik na funkcję?
C/C++
typedef struct { int id; string opis; float( * funkcja )( float ); char jednostka; } Item;

vector < Item > data = {
    {
1, "Z Celsjuszy na Fahrenheita", CtoF, 'F' },
   
{ 2, "Z Fahrenheita na Celsjusze", FtoC, 'C' }
}
;

float wynik = data[ choice - 1 ].funkcja( temp );
P-179080
nanoant20
Temat założony przez niniejszego użytkownika
» 2021-11-22 18:45:05
Dziękuję @pekfos
próbowałem ze wskażnikiem ale przy wywoływaniu, z marnym skutkiem
Jeszcze raz dziękuję
P-179081
« 1 »
  Strona 1 z 1