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

Klasa c++ niest składnia

VPS Starter Arubacloud
0 głosów
187 wizyt
pytanie zadane 21 grudnia 2019 w C i C++ przez Mavannkas Bywalec (2,290 p.)
edycja 21 grudnia 2019 przez Mavannkas

Witam, może ktoś doradzić o co chodzi? Dopiero zaczynam z obiektówką i nie wiem skąd ten błąd 

Question* quest;
int number = 0;
string fileName = "ankieta";
while (true)
{
	number++;
	cout << "Aby wykorzystac swoja ankiete zamien plik ankieta.txt w folderze z programem na plik o tym samym formacie";
	quest = new Question(fileName, number);
	if (quest->question=="")
	{
		cout << "\n\n\nTo bylo ostatnie pytanie";
		break;
	}
	if (quest->question=="")
	break;
}

Kod do tej klasy

class Question 
{
	public:
		static int qA, qB, qC;
		Question(string fileName, int num);
		int answer();
		string question;
	private:
		string a, b, c;
		int questNumber;
	
};

Funckje klasy

int Question::answer()
{
	int ans=0;
	bool temp = false;;
	cout << question << endl <<"1."<< a << endl <<"2."<< b << endl <<"3."<< c << endl;
	while (temp)
	{
		temp = false;
		cin >> ans;
		if (ans == 1)
		{
			qA++;
		}
		else if (ans == 2)
		{
			qB++;
		}
		else if (ans == 3)
		{
			qC++;
		}
		else if (ans == 0)
		{

		}
		else
		{
			temp = true;
			cout << endl << "Zla odp" << endl;
		}
	}
	return ans;
}
Question::Question(string fileName, int num)
{
	questNumber = num;
	fstream file;
	file.open(fileName + ".txt", ios::in);
	if (file.good() == 0)
	{
		cout << "Nie udało się otworzyć pliku";
	}
	else
	{
		int lineNumber = (num - 1) * 4 + 1;
		int tempNum = 1;
		string tempString;
		while (getline(file, tempString))
		{
			if (tempNum == lineNumber) question = tempString;
			if (tempNum == lineNumber+1) a = tempString;
			if (tempNum == lineNumber+2) b = tempString;
			if (tempNum == lineNumber+3) c = tempString;

			tempNum++;

		}
	}
}

 

\A błąd 


Nierozpoznawalny symbol zewn

 

komentarz 21 grudnia 2019 przez j23 Mędrzec (194,920 p.)

Nie lepiej wczytać wszystkie pytania na początku do std::vector<Question>, zamiast przy każdym pytaniu przewalać cały plik z pytaniami?

W pierwszym kodzie masz wyciek - tworzysz obiekt quest, ale nigdzie go nie usuwasz. Przy takim użyciu klasy Question ten new jest tutaj zbędny, obiekt może być spokojnie tworzony na stosie, we wnętrzu ciała pętli.

 

komentarz 21 grudnia 2019 przez Mavannkas Bywalec (2,290 p.)
Tak zauważyłem to później i dodałem. I w sumie lepiej ale jeszcze nie zajmowałem się biblioteką vector muszę to nadrobić bo daje wielkie możliwości

3 odpowiedzi

+1 głos
odpowiedź 21 grudnia 2019 przez criss Mędrzec (172,590 p.)
wybrane 21 grudnia 2019 przez Mavannkas
 
Najlepsza

Musisz dodać definicje statycznych memberów, w pliku .cpp.

int Question::qA = 0;
int Question::qB = 0;
int Question::qC = 0;
komentarz 21 grudnia 2019 przez Mavannkas Bywalec (2,290 p.)
Zapomniałem, że przy definicji w innym pliku robi się to w ten sposób dzięki
+1 głos
odpowiedź 21 grudnia 2019 przez mmarszik Mądrala (7,390 p.)
Może nie są zdefiniowane składowe klasy, bo w tym co wkleiłeś widać tylko deklaracje.
komentarz 21 grudnia 2019 przez Mavannkas Bywalec (2,290 p.)
Dodałem resztę info o klasie klasa znajduje się w pliku nagłówkowym a funkcje w innych
+1 głos
odpowiedź 22 grudnia 2019 przez RafalS VIP (122,820 p.)
Jako ciekawostka - od C++17 statyczne składowe mogą być deklarowane jako inline i nie potrzebują wtedy dodatkowej definicji w pliku cpp.

Podobne pytania

0 głosów
2 odpowiedzi 3,738 wizyt
pytanie zadane 14 listopada 2016 w C i C++ przez xjakubekx Obywatel (1,280 p.)
0 głosów
1 odpowiedź 236 wizyt
0 głosów
1 odpowiedź 184 wizyt
pytanie zadane 25 kwietnia 2020 w C i C++ przez demon1234 Nowicjusz (160 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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!

...