Obiekt nie może się utworzyć

Obiekt nie może się utworzyć
87
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 208
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

Kopiuj
#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

Kopiuj
 #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

Kopiuj
#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      
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
4

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

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
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.

87
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 208
0

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

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
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.

grzesiek51114
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2442
0

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

87
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 208
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.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
2
Kopiuj
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.

87
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 208
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.

87
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 208
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ć?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.