Nowe posty

xx Dystrybucja pod HP Omen (6)
2024-03-27, 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
lamp Problem z Linux Lite po instalacji (0)
2024-03-27, 19:50:30
xx Ile pingwinów? (1)
2024-03-27, 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: zmienne z klasy widoczne w main  (Przeczytany 1149 razy)

KelThuzad

  • Gość
zmienne z klasy widoczne w main
« dnia: 2016-10-12, 21:39:30 »
witam w klasie mam 3 zmienne i chce zrobić tak by te zmienne miały przypisane w metodzie wartosci z pliku. Ale by miał do nich dostęp z każdej innej klasy i bym mógł je wypisać w main. Dowiedziałem się o czymś takim jak extern ale jakoś w main nie działa?
main.cpp
#include "open_file.h"
#include <iostream>
#include <fstream>

//extern double budget;
int main()
{
    Open_file my_file;
    extern double budget;
    std::cout << "mamy tyle pieniedzy: " << budget << std::endl;
    return 0;
}
open_file.h
#ifndef OPEN_FILE_H
#define OPEN_FILE_H
#include <fstream>
#include <iostream>
class Open_file
{
public:
    std::fstream my_file;
    double budget = {};
    double smart_saver_mateusz = {};
    double smart_saver_justyna = {};
    Open_file();
//    ~Open_file();
    void save_data_to_variables();
    void close_my_file();
};

#endif // OPEN_FILE_H
open_file.cpp
#include "open_file.h"
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>

Open_file::Open_file()
{
    std::cout << "sprawdzamy czy plik sie odtworzy" << std::endl;
    my_file.open( "dane.txt" , std::ios::in );
    if ( my_file.is_open() == true)
        std::cout << "Uzyskano dostep do plik" << std::endl;
    else
    {
        std::cerr << "Nie mozna otworzyć pliku" << std::endl;
        exit( EXIT_FAILURE );
    }
    save_data_to_variables();
    close_my_file();

}
//===============================================================================
void Open_file::save_data_to_variables()
{
    std::cout << "Dodanie wartosci z pliku" << std::endl;
    std::string line = {};
    int number_line = 1;
    while ( std::getline( my_file , line ) )
    {
        switch ( number_line )
        {
            case 1: budget = atoi(line.c_str()) ; break;
            case 2: smart_saver_mateusz = atoi(line.c_str()); break;
            case 3: smart_saver_justyna = atoi(line.c_str()); break;
        }
        ++number_line;
    }

}
//===============================================================================
void Open_file::close_my_file()
{
    my_file.close();
    std::cout << "cos tam";
    std::cout << "mamy tyle pieniedzy: " << budget << std::endl;
}

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3049
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: zmienne z klasy widoczne w main
« Odpowiedź #1 dnia: 2016-10-12, 21:59:09 »
 :o

#include "open_file.h"
#include <iostream>
#include <fstream>

//extern double budget;
int main()
{
    Open_file my_file;
    std::cout << "mamy tyle pieniedzy: " << my_file.budget << std::endl;
    return 0;
}

ale naprawdę o powinno być:
#ifndef OPEN_FILE_H
#define OPEN_FILE_H
#include <fstream>
#include <iostream>
class Open_file
{
private: // Klient nie powinien w ogóle zaglądać do składowych
    std::fstream my_file;
    double budget = {};
    double smart_saver_mateusz = {};
    double smart_saver_justyna = {};

public:
    Open_file();
//    ~Open_file();
    void save_data_to_variables();
    void close_my_file();

    inline double getBudget() const { return budget;}
};
#endif // OPEN_FILE_H

#include "open_file.h"
#include <iostream>
#include <fstream>

//extern double budget;
int main()
{
    Open_file my_file;
    std::cout << "mamy tyle pieniedzy: " << my_file.getBudget() << std::endl;
    return 0;
}
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy