Obiekt nie może się utworzyć

0

witam mam problem chce zadeklarować obiekt do klasy ale nie mogę go uruchomić bo mam błąd: "invalid use of 'Open_file::Open_file"

main.cpp

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

int main()
{
    Open_file my_file_bugdet;
    my_file_bugdet.Open_file();
    return 0;
}

 

open_file.cpp

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

Open_file::Open_file()
{
    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 );
    }

}
//===============================================================================
void Open_file::save_data_to_variables()
{
    std::cout << "nic nie ma";
}
//===============================================================================
void Open_file::close_my_file()
{
    my_file.close();
}

open_file.h

#ifndef OPEN_FILE_H
#define OPEN_FILE_H
#include <fstream>

class Open_file
{
public:
    std::fstream my_file;
    Open_file();
    ~Open_file();
    void save_data_to_variables();
    void close_my_file();
};

#endif // OPEN_FILE_H      
4

Nie możesz wywołać konstruktora jako metody. Jest on wołany automatycznie podczas tworzenia obiektu.

1

@kq ma rację. Zawartość tego co jest w konstruktorze zostaje wykonana w tym miejscu: Open_file my_file_bugdet; W ogóle nie nazywaj klasy formą czasownikową, bo sam widzisz, że Ci się myli i wywołujesz nie to co trzeba.

0

czyli muszę dać coś takiego Open_file my_file_bugdet()?

0

Nie, to akurat będzie Most Vexing Parse. Już masz dobrze zdefiniowaną zmienną, która jest inicjalizowana konstruktorem w punkcie definicji. W następnej linii próbujesz wywołać nielegalnie konstruktor.

0

To: Open_file::Open_file() jest konstruktor. Uruchamia się tam gdzie napisaliśmy Ci razem z @kq

0

teraz to się pogubiłem na kanale youtube Pasja informatyki jest tam że konstruktor wywołuje się nazwa_konstruktora nazwa_obiektu w innym programie coś podobnego działało tylko wywoływałem obiekt z argumentem.

2
Open_file my_file_bugdet;

Przecież wszystko masz:
Open_file to nazwa konstruktora (czyli nazwa klasy)
my_file_budget to nazwa obiektu, który tworzysz.

0

Ok ale gdzieś przeczytałem ze taki konstruktor można wywołać Open_file::Open_file() nie wiem czy poprzednikom też chodziło o to bo raczej jestem nobem w programowaniu. Ale tamto nie działa ale program się kompiluje a coś takiego Open_file my_file_budget; nie działa. Powinno mi się pokazać że albo plik jest albo go nie mam, ale nic nie mam. Więc może to dalej gdzieś popsułem kod.

0

Dobra mam pytanie rozwiązanie Open_file my_file; działa ale co jest dziwne, to to że zadziałało mi to kiedy skasowałem w open_file.h linie z destruktorem ~Open_file();. Może mi ktoś to wyjaśnić?

1 użytkowników online, w tym zalogowanych: 0, gości: 1