• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Problem z kodem

Object Storage Arubacloud
0 głosów
352 wizyt
pytanie zadane 6 sierpnia 2016 w C i C++ przez niezalogowany
zamknięte 6 sierpnia 2016

Witam jestem kompletnie zielony i świeży jeśli chodzi o programowanie w języku C++, mam kodzik i próbowałem na własną rękę rozwiązać problem jednak się nie udało. Wylatują błędy. Oto kod:

#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdio>

using namespace std;

string nazwa;
int odpowiedz;

void record(int i, string j)
{
	switch(i)
	{
		case 1:
			plik<<"Napisano: "<<j<<endl;
		break;
		default:
			plik.close()
			return 0;
	}
}

void napisz()
{
	system("cls");
	cout<<"Co napisac? "<<endl;
	cin>>napisz<<endl;
	record(1, napisz)
	goto A;
}

int main()
{

	fstream plik;
	plik.open("record.txt", ios::out | ios::app);
  
A:	system("cls");    
	cout<<"MENU"<<endl;
    cout<<"1. Napisz tekst"<<endl;
    cin>>odpowiedz;
    
    switch(odpowiedz)
    {
    	case 1:
    		napisz();
    	break;
    	default:
    		plik.close();
    		return 0;
	}
	
    
    
    plik.close();
    return 0;
}

A oto błedy:

C:\Users\Kacper\Documents\Recorder\main.cpp    In function 'void record(int, std::string)':
16    4    C:\Users\Kacper\Documents\Recorder\main.cpp    [Error] 'plik' was not declared in this scope
C:\Users\Kacper\Documents\Recorder\main.cpp    In function 'void napisz()':
28    5    C:\Users\Kacper\Documents\Recorder\main.cpp    [Error] ambiguous overload for 'operator>>' (operand types are 'std::istream {aka std::basic_istream<char>}' and 'void()')
28    5    C:\Users\Kacper\Documents\Recorder\main.cpp    [Note] candidates are:
40    0    C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\iostream    In file included from C:/Program Files (x86)/Dev-Cpp/MinGW64/lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/iostream
1        C:\Users\Kacper\Documents\Recorder\main.cpp                     from C:\Users\Kacper\Documents\Recorder\main.cpp
120    7    C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\istream    [Note] std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__istream_type& (*)(std::basic_istream<_CharT, _Traits>::__istream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>] <near match>
120    7    C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\istream    [Note] no known conversion for argument 1 from 'void()' to 'std::basic_istream<char>::__istream_type& (*)(std::basic_istream<char>::__istream_type&) {aka std::basic_istream<char>& (*)(std::basic_istream<char>&)}'
124    7    C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\istream    [Note] std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>::__ios_type& (*)(std::basic_istream<_CharT, _Traits>::__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>; std::basic_istream<_CharT, _Traits>::__ios_type = std::basic_ios<char>] <near match>
124    7    C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\istream    [Note] no known conversion for argument 1 from 'void()' to 'std::basic_istream<char>::__ios_type& (*)(std::basic_istream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}'
131    7    C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\istream    [Note] std::basic_istream<_CharT, _Traits>::__istream_type& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::__istream_type = std::basic_istream<char>] <near match>
131    7    C:\Program Files (x86)\Dev-Cpp\MinGW64\lib\gcc\x86_64-w64-mingw32\4.9.2\include\c++\istream    [Note] no known conversion for argument 1 from 'void()' to 'std::ios_base& (*)(std::ios_base&)'
29    18    C:\Users\Kacper\Documents\Recorder\main.cpp    [Error] could not convert 'napisz' from 'void (*)()' to 'std::string {aka std::basic_string<char>}'

Mam nadzieję że ktoś pomoże. 

komentarz zamknięcia: Rozstrzygięcie

4 odpowiedzi

0 głosów
odpowiedź 6 sierpnia 2016 przez MichuDev Pasjonat (20,300 p.)
cin>>napisz<<endl;

Do strumieni typu basic_istream<T> nie używamy danych wyjściowych i operatora << ponieważ on zapisuje dane do strumienia.

Zamiast tego możesz zapisać coś takiego:

cin>>napisz; cout << endl;

Funkcja system nie jest funkcją ze standardu C++, jest ona z biblioteki systemowej systemu windows, a konkretnie z pliku nagłówkowego windows.h który dołączamy pisząc #include <windows.h>. Jeśli użyjemy tego pliku nagłówkowego tak jak pozostałych nasz kod będzie tylko pod system Windows. Można stosować różne sztuczki, ale trzeba jeszcze podać kilka błędów :).

Po co zamykasz plik na końcu main'a ?

Nie używaj zmiennych globalnych i instrukcji goto.

Może lepiej podziel to na funkcje, ponieważ nie zrozumiałeś jak dobrze jest podzielić program. A jak umiesz programowanie obiektowe pokombinuj z klasami :)

 

komentarz 6 sierpnia 2016 przez Pijany Python Użytkownik (900 p.)

Funkcja system nie jest funkcją ze standardu C++, jest ona z biblioteki systemowej systemu windows, a konkretnie z pliku nagłówkowego windows.h który dołączamy pisząc #include <windows.h>.

Eee, nie. Funkcja system jest ze standardowej biblioteki C/C++(stdlib.h/cstdlib). Z tym, że kod będzie tylko pod windows to się zgodzę(chyba, że będzie próbował wykonać jakąś komendę wspólną dla windows'a i linux'a np. echo).

A jak umiesz programowanie obiektowe pokombinuj z klasami :)

Nie widzę sensu stosowania obiektowości w tym programie.

0 głosów
odpowiedź 6 sierpnia 2016 przez MrSqoobany Początkujący (460 p.)

W voidzie (11 linia) nie zadeklarowałeś "plik" (16 linia)
Brakuje Ci biblioteki stdlib.h lub windows.h (26 linia)
"cin>>napisz<<endl;" //takich rzeczy nie robimy ;p
lepiej zrobić coś takiego:


cin>>napisz;

cout<<endl;

Co do instruckji goto, unikaj tego.

56 linia po co zamykasz plik?
Spróbuj napisać od nowa i nie mieszać tego w ten sposób:)

0 głosów
odpowiedź 6 sierpnia 2016 przez obl Maniak (51,280 p.)

Linia 16:

            plik<<"Napisano: "<<j<<endl;

Próbujesz odwołać się do zmiennej, która nie została zadeklarowana (chodzi o plik).

to samo w linii 19.

Linia 20:

            return 0;

funkcja nie zwraca żadnych danych a ty próbujesz zwrócić zero.

Linia 28:

    cin>>napisz<<endl;

A to ci dopiero, próbujesz pobrać dane do wskaźnika na funkcję? A i <<endl już ci ktoś wyjaśnił dlaczego nie może być.

Linia 29:

    record(1, napisz)

brak średnika na końcu i jako argument podajesz wskaźnik do funkcji a nie zmienną typu string.

0 głosów
odpowiedź 6 sierpnia 2016 przez niezalogowany

Już zakończyłem pisanie kodu. Wszystko działa jak chciałem. Oto kod:

#include <iostream>
#include <fstream>
#include <ctime>
#include <cstdio>
#include <windows.h>

using namespace std;

string nazwa;
int odpowiedz;

void record(int i, string j)
{
    time_t czas;
    time( & czas );
	fstream plik;
	plik.open("record.txt", ios::out | ios::app);
	plik<<ctime( & czas )<<endl;
	switch(i)
	{
		case 1:
			plik<<"Napisano: "<<j<<endl;
		break;
		default:
			plik.close();
	}
	plik.close();
}

void napisz()
{
	system("cls");
	cout<<"Co napisac? "<<endl;
	cin>>nazwa;
	cout<<endl;
	record(1, nazwa);
}

int main()
{

	fstream plik;
	plik.open("record.txt", ios::out | ios::app);
  	plik<<
  
  	system("cls");    
	cout<<"MENU"<<endl;
    cout<<"1. Napisz tekst"<<endl;
    cin>>odpowiedz;
    
    switch(odpowiedz)
    {
    	case 1:
    		napisz();
    	break;
    	default:
    		plik.close();
    		return 0;
	}
	
    
    
    plik.close();
}

 

Podobne pytania

–1 głos
2 odpowiedzi 181 wizyt
pytanie zadane 6 sierpnia 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 111 wizyt
pytanie zadane 2 listopada 2019 w C i C++ przez uwnor Nowicjusz (120 p.)
0 głosów
1 odpowiedź 159 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez Paweł Nowakowski Nowicjusz (150 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...