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

question-closed Problem z kodem

VPS Starter Arubacloud
0 głosów
342 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 175 wizyt
pytanie zadane 6 sierpnia 2016 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 104 wizyt
pytanie zadane 2 listopada 2019 w C i C++ przez uwnor Nowicjusz (120 p.)
0 głosów
1 odpowiedź 149 wizyt
pytanie zadane 11 stycznia 2017 w C i C++ przez Paweł Nowakowski Nowicjusz (150 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...