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: #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( string & nazwa ) { fstream plik( nazwa, std::ios::in ); 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 ); 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&)' |
|
karambaHZP |
» 2017-06-13 20:22:09 Usuń flagi out i in oraz przekazuj do funkcji const std::string&. |
|
HraSzcZoR Temat założony przez niniejszego użytkownika |
» 2017-06-13 20:30:43 #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] |
|
karambaHZP |
» 2017-06-13 20:35:15 nazwa.c_str() |
|
mateczek |
» 2017-06-13 20:41:33 |
|
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. |
|
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>&'
|
|
carlosmay |
» 2017-06-13 23:13:16 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ł. |
|
« 1 » 2 |