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

Błąd w kodzie C++ Obiektowe 2odc.

Object Storage Arubacloud
0 głosów
63 wizyt
pytanie zadane 15 kwietnia w C i C++ przez stachukk55 Nowicjusz (120 p.)

Siema!

Mógłby ktoś sprawdzić kod i powiedzieć czemu mi się to nie chce skompilować? Ofc nie wyrzuca mi żadnych błędów jedynie nie chce się odpalić ;). (error C3861: "getline": identyfikatora nie odnaleziono) 
Jak dodałem do nagłówka w pytanie.cpp #include "string" to sie odpala ale niestety błąd nie udało sięzaładować pliku/

main.cpp

#include <iostream>
#include "pytanie.h"
using namespace std;

int main()
{
    pytanie p[5];
    int suma = 0;
    for (int i = 0; i <= 4; i++)
    {
        p[i].nr_pyt = 1;
        p[i].wczytaj();
        p[i].zadaj();
        p[i].sprawdz();
    }
    

    cout << "KONIEC! PTK= " << suma;

    return 0;
}

pytanie.cpp

#include <iostream>
#include "pytanie.h"
#include <fstream>
#include <cstdlib>
#include "string"


using namespace std;

void pytanie::wczytaj()
{
	fstream plik;
	plik.open("quiz.txt", ios::in);

	if (plik.good() == false)
	{
		cout << "nie udalo sie wczytac pliku" << endl;
		exit(0);
	}

	int nr_linii = (nr_pyt - 1) * 6 + 1;
	int aktualny_nr = 1;
	string linia;

	while (getline(plik, linia))
	{
		if (aktualny_nr == nr_linii) tresc = linia;
		if (aktualny_nr == nr_linii + 1) a = linia;
		if (aktualny_nr == nr_linii + 2) b = linia;
		if (aktualny_nr == nr_linii + 3) c = linia;
		if (aktualny_nr == nr_linii + 4) d = linia;
		if (aktualny_nr == nr_linii + 5) poprawna = linia;
		aktualny_nr++;
	}
	plik.close();
}

void pytanie::zadaj()
{
	cout << endl << tresc << endl;
	cout << a << endl;
	cout << b << endl;
	cout <<	c << endl;
	cout << d << endl;
	cout << "-------------" << endl;
	cout << "Odpowiedz: " << endl;
	cin >> odp;
}

void pytanie::sprawdz()
{
	if (odp == poprawna)
	{
		ptk = 1;
	}
	else
	{
		ptk = 0;
	}
}

pytanie.h

#pragma once
#include <iostream>

using namespace std;

class pytanie
{
	public:
		string tresc;
		string a, b, c, d;
		int nr_pyt;
		string poprawna;
		string odp;
		int ptk; // 1 lub 0

		void wczytaj(); // wczytuje dane z pliku
		void zadaj();
		void sprawdz();

};

Fajnie jakby ktoś pomógł ;))

komentarz 15 kwietnia przez Oscar Nałogowiec (29,320 p.)

Skoro pisał:

error C3861: "getline": identyfikatora nie odnaleziono

To jednak pokazywał błędy...

Otwieranie pliku to skomplikowana sprawa, szczególnie dla początkujących. Nie jest to sprawa programu a systemu operacyjnego. Dysk jest wielki i są na nim dziesiatki tysięcy plików. Są one pogrupowane w katalogi i albo musisz uruchamiać program w tym katalogu, w którym jest plik, albo wskazać w programie dokładnie gdzie jest potrzebny plik. Jak uruchamiasz program w jakimś środowisku IDE to bliżej nie wiadomo w którym katalogu jest uruchamiany program - różne środowiska robią to różnie, gdzieś glęboko w ustawieniach pewnie można to sprawdzić/ustawić.

Ja czasami po prostu w programie tworzyłem plik o jakiejś dziwnej nazwie i potem wyszukiwałem go na dysku. smiley

A co do kodu - masz 5 obiektów jednej klasy dokładnie identycznych i w każdym czytasz ten sam plik. Na pewno o to chodzilo? Co prawda próbujesz podstawić coś pod nr_pyt, ale jest to zawsze 1 (chyba powinno być i).

W żaden sposób nie modyfikujesz zmiennej suma - program zawsze wypisze 0.

 

1 odpowiedź

0 głosów
odpowiedź 15 kwietnia przez wizarddos Nałogowiec (26,050 p.)

Nie powinno być przypadkiem

#include <string>

zamiast

#include "string"

Skoro jednak odnosimy się do string ze standardowej biblioteki a nie pliku w aktualnym folderze nazwanego string?

Podobne pytania

–3 głosów
2 odpowiedzi 396 wizyt
pytanie zadane 13 marca 2018 w C i C++ przez Damian918 Nowicjusz (160 p.)
0 głosów
4 odpowiedzi 975 wizyt
pytanie zadane 6 stycznia 2021 w Algorytmy przez monia79wawa Nowicjusz (190 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 18 grudnia 2022 w C i C++ przez Krloo Początkujący (480 p.)

92,666 zapytań

141,564 odpowiedzi

320,021 komentarzy

62,033 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

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!

...