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

Zmienna string jako nazwa pliku

Ostatnio zmodyfikowano 2017-06-14 00:03
Autor Wiadomość
HraSzcZoR
Temat założony przez niniejszego użytkownika
Zmienna string jako nazwa pliku
» 2017-06-13 20:14:53
Witam, chce zrobić program, w którym muszę otwierać i zapisywać ponad 20 plików.
Mogę zrobić to dla każdego pliku osobno, lecz to zajmuje dużo miejsca a ja chcę by program był jak najkrótszy

Próbuję to zrobić na zasadzie, że użytkownik wpisuje nazwę pliku, a ten plik się otwiera(Tak by do tego wystarczyła jedna instrukcja odczytu i zapisu

coś takiego:

C/C++
#include <iostream>
#include <string>
#include <vector>
#include <fstream>

using namespace std;
vector < int > liczby( 10, 6 );
int zapis( string & nazwa );
int odczyt( string & nazwa );


int main()
{
    string nazwa;
    cout << "Nazwa: ";
    cin >> nazwa; //Uzytkownik wpisuje nazwę pliku
   
    odczyt( nazwa );
    zapis( nazwa );
}

int odczyt( string & nazwa ) //nazwa jest przenoszona do funkcji do odczytywania zawartosci
{
   
    // Powinno otworzyc plik o nazwie ktora wpisal uzytkownik
    fstream plik( nazwa, std::ios::in ); //<<< tu wyskakuje blad
    if( plik.good() )
    {
        for( int i = 0; i < 10; i++ )
        {
            plik >> liczby[ i ];
        }
    }
    else
    {
        cout << "Nie udalo sie otworzyc pliku, skontaktuj sie z autorem\n";
    }
}





int zapis( string & nazwa )
{
    ofstream plik( nazwa, std::ios::in | std::ios::out | ios::trunc ); //<<< tu wyskakuje blad
    if( plik.good() )
    {
        for( int i = 0; i < 10; i++ )
        {
            plik << liczby[ i ];
            plik << "\n";
        }
    }
    else
    {
        cout << "Nie udalo sie otworzyc pliku, skontaktuj sie z autorem\n";
    }
}

Np gdy Użytkownik wpisze "plik1" to otworzy mu się plik o tej właśnie nazwie. Podczas kompilacji wyskakuje niestety błąd:

[Error] no matching function for call to 'std::basic_fstream<char>::basic_fstream(std::string&, const openmode&)'
P-162500
karambaHZP
» 2017-06-13 20:22:09
Usuń flagi out i in oraz przekazuj do funkcji const std::string&.
P-162501
HraSzcZoR
Temat założony przez niniejszego użytkownika
» 2017-06-13 20:30:43
C/C++
#include <iostream>
#include <string>
#include <vector>
#include <fstream>

using namespace std;
vector < int > liczby( 10, 6 );
int zapis( string & nazwa );
int odczyt( string & nazwa );


int main()
{
    string nazwa;
    cout << "Nazwa: ";
    cin >> nazwa;
   
    odczyt( nazwa );
    zapis( nazwa );
}

int odczyt( const std::string & nazwa )
{
   
   
    fstream plik( nazwa );
    if( plik.good() )
    {
        for( int i = 0; i < 10; i++ )
        {
            plik >> liczby[ i ];
        }
    }
    else
    {
        cout << "Nie udalo sie otworzyc pliku, skontaktuj sie z autorem\n";
    }
}





int zapis( const std::string & nazwa )
{
    ofstream plik( nazwa );
    if( plik.good() )
    {
        for( int i = 0; i < 10; i++ )
        {
            plik << liczby[ i ];
            plik << "\n";
        }
    }
    else
    {
        cout << "Nie udalo sie otworzyc pliku, skontaktuj sie z autorem\n";
    }
}

[Error] no matching function for call to 'std::basic_fstream<char>::basic_fstream(const string&)'



Dalej to samo :([/i]
P-162503
karambaHZP
» 2017-06-13 20:35:15
nazwa.c_str()
P-162504
mateczek
» 2017-06-13 20:41:33
nazwa.c_str()

można normalnie jako string ale trzeba włączyć c++11
https://youtu.be/tWSf3DTnHfo​?t=139
P-162506
karambaHZP
» 2017-06-13 20:49:26

można normalnie jako string ale trzeba włączyć c++11
 Nie wszędzie.
Kompilator obsługujący C++11 powinien w logu kompilacji poinformować, że próbuje użyć składni z nowszego standardu niż obecnie używa. Autor powinien wklejać więcej info o kompilacji.
P-162507
HraSzcZoR
Temat założony przez niniejszego użytkownika
» 2017-06-13 22:00:33
ajj o to caly log kompilacji:
screen: http://screenshot.sh/oAG8i0Tgory6E

Log:

C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp In function 'int odczyt(const string&)':
26 23 C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp [Error] no matching function for call to 'std::basic_fstream<char>::basic_fstream(const string&)'
26 23 C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp [Note] candidates are:
4 0 C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp In file included from C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp
819 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] std::basic_fstream<_CharT, _Traits>::basic_fstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]
819 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] no known conversion for argument 1 from 'const string {aka const std::basic_string<char>}' to 'const char*'
806 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] std::basic_fstream<_CharT, _Traits>::basic_fstream() [with _CharT = char; _Traits = std::char_traits<char>]
806 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] candidate expects 0 arguments, 1 provided
779 11 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] std::basic_fstream<char>::basic_fstream(const std::basic_fstream<char>&)
779 11 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] no known conversion for argument 1 from 'const string {aka const std::basic_string<char>}' to 'const std::basic_fstream<char>&'
C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp In function 'int zapis(const string&)':
46 25 C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp [Error] no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(const string&)'
46 25 C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp [Note] candidates are:
4 0 C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp In file included from C:\Users\Mateusz\Desktop\DevCPP\dzienniczek\test\sd.cpp
643 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] std::basic_ofstream<_CharT, _Traits>::basic_ofstream(const char*, std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode = std::_Ios_Openmode]
643 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] no known conversion for argument 1 from 'const string {aka const std::basic_string<char>}' to 'const char*'
628 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] std::basic_ofstream<_CharT, _Traits>::basic_ofstream() [with _CharT = char; _Traits = std::char_traits<char>]
628 7 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] candidate expects 0 arguments, 1 provided
602 11 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] std::basic_ofstream<char>::basic_ofstream(const std::basic_ofstream<char>&)
602 11 C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\fstream [Note] no known conversion for argument 1 from 'const string {aka const std::basic_string<char>}' to 'const std::basic_ofstream<char>&'

P-162512
carlosmay
» 2017-06-13 23:13:16
C/C++
void zapis( const string & nazwa );
void odczyt( const string & nazwa );
Deklaracje nie miały zmienionych postaci, zmienione były tylko rozwinięcia.
Wtedy zapowiedź nie dotyczy już tego samego.
Deklarujesz, że funkcje mają zwracać wartość
int
 a nic z nich nie zwracasz.

edit:
jeszcze mi umknęło:
ifstream plik( nazwa );
 w funkcji
odczyt
.
Dlaczego
vector < int > liczby( 10, 6 );
 jest globalne? Kiepski pomysł.
P-162521
« 1 » 2
  Strona 1 z 2 Następna strona