Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: zmienne z klasy widoczne w main  (Przeczytany 1159 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: 3056
  • 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