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

Indentyfikatora nie odnaleziono - jak przerzucić funkcję do osobnego pliku?

Object Storage Arubacloud
0 głosów
556 wizyt
pytanie zadane 26 marca 2020 w C i C++ przez Hyack Nowicjusz (200 p.)

Uszanowanko!

 

Mam pewien problem. Utworzyłem sobie klasę oraz jej funkcję i rozmieściłem wszystko do odpowiednich plików. Tak to się przedstawia:

 

Automoto.cpp (main)

 

#include "pojazdy.h"
#include <iostream>

using namespace std;

int main()
{
	Pojazdy** poj;
	int size{ 0 }, index{ 0 };
	Petla(poj, size);
	
	print(poj, size);

	wyrejestruj(poj,size,0);
	print(poj, size);
	wyrejestruj(poj,size);


	return 0;

}

 

pojazdy.h

 

#include <iostream>
#include <cstdlib>
using namespace std;

class Pojazdy
{
public:
	string typ;
	string marka;
	string model;
	string z_dod;
	int ilosc;
	int cena;

	void dodaj();
	void d_pojazd(Pojazdy**& pojazdy, int& size);
	void wyrejestruj(Pojazdy**& pojazdy, int& size, int index);
	void print(Pojazdy** pojazdy, int size);
	void Petla(Pojazdy**& p, int& size);

	//void wyswietl();
	int get_ilosc() { return ilosc; }
	string get_typ() { return typ; }
	string get_marka() { return marka; }
	string get_model() { return model; }
	int get_cena() { return cena; }
	void set_ilosc(int x);

};

 

pojazdy.cpp

 

#include "pojazdy.h"

#include <iostream>

using namespace std;


void Pojazdy::set_ilosc(int x) { ilosc = x; }

void Pojazdy::dodaj()
{
	cout << "DODAWANIE POJAZDU..." << endl;
	cout << "Podaj typ pojazdu:";
	cin >> typ;

	cout << "Podaj marke pojazdu: ";
	cin >> marka;

	cout << "Podaj model pojazdu: ";
	cin >> model;

	cout << "Dodaj cene pojazdu: ";
	cin >> cena;

}

void Petla(Pojazdy**& p, int& size) {
	char z_dod;// = 'N';
	do {
		d_pojazd(p, size); //odpowiada za dodawnie
		p[size - 1]->dodaj();
		cout << "Czy chcesz zakonczyc dodawanie? Jesli tak, wcisnij Y/N: ";
		cin >> z_dod;

	} while (z_dod == 'N' || z_dod == 'n');//while (p[size]->z_dod == "N" ||p[size]->z_dod == "n");
}

void print(Pojazdy** pojazdy, int size) {
	std::cout << "====================================" << std::endl;
	for (int i{ 0 }; i < size; i++)
		std::cout << "Typ: " << pojazdy[i]->get_typ() << " Marka: " << pojazdy[i]->get_marka() << " Model: " << pojazdy[i]->get_model() << " Cena: " << pojazdy[i]->get_model() << std::endl;
}


void wyrejestruj(Pojazdy**& pojazdy, int& size) {
	for (size_t i{ 0 }; i < size; i++)
		delete pojazdy[i];
	delete[] pojazdy;
	size = 0;
	pojazdy = NULL;
}

void wyrejestruj(Pojazdy**& pojazdy, int& size, int index) {
	if (index < size) {
		Pojazdy** temp = new Pojazdy * [size - 1];
		short int j{ -1 };
		for (size_t i{ 0 }; i < size; i++) {
			if (i != index) {
				j++;
				temp[j] = pojazdy[i];
			}
		}
		delete[] pojazdy;
		--size;
		pojazdy = temp;
	}
	else
		std::cout << "Pamiec zwolniona!" << std::endl;


}

void d_pojazd(Pojazdy**& pojazdy, int& size) {
	Pojazdy** temp = new Pojazdy * [size + 1];
	if (size == 0)
		temp[size] = new Pojazdy;
	else {
		for (int i{ 0 }; i < size; i++)
			temp[i] = pojazdy[i];
		delete[] pojazdy;

		temp[size] = new Pojazdy;
	}
	++size;
	pojazdy = temp;
}

 

Niestety, cały czas dostaje monit o tym, że "identyfikatora nie odnaleziono", gdy tylko próbuję wywoływać dane funkcję w moim mainie, czyli automoto.cpp - kod błędu C3861, w Visual Studio 2019, kod wygląda tak:

 

1>------ Kompilacja — uruchomiono: projekt: automoto, konfiguracja: Debug|Win32 ------
  automoto.cpp
C:\Users\Lukasz\Desktop\automoto\automoto.cpp(14,2): error C3861: "Petla": identyfikatora nie odnaleziono
C:\Users\Lukasz\Desktop\automoto\automoto.cpp(16,2): error C3861: "print": identyfikatora nie odnaleziono
C:\Users\Lukasz\Desktop\automoto\automoto.cpp(18,2): error C3861: "wyrejestruj": identyfikatora nie odnaleziono
C:\Users\Lukasz\Desktop\automoto\automoto.cpp(19,2): error C3861: "print": identyfikatora nie odnaleziono
  pojazdy.cpp
C:\Users\Lukasz\Desktop\automoto\automoto.cpp(20,2): error C3861: "wyrejestruj": identyfikatora nie odnaleziono
C:\Users\Lukasz\Desktop\automoto\pojazdy.cpp(30,3): error C3861: "d_pojazd": identyfikatora nie odnaleziono

 

Jakieś pomysły? :) 

1 odpowiedź

0 głosów
odpowiedź 26 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
W pliku naglowkowmy musisz dac albo

#pragma once

Lub

#ifndef _nazwa_HPP

#define _nazwa_HPP

Wywal namespace z pliku naglowkowego i te biblioteki, one przydadza sie tylko w pliku.cpp

#endif

 

http://cpp0x.pl/kursy/Kurs-C++/Dzielenie-kodu-na-kilka-plikow-zrodlowych/310
komentarz 26 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
Pojazdy::

a tego to chyba zapomniales dodac w kazdej funkcji, co nie?

komentarz 26 marca 2020 przez Hyack Nowicjusz (200 p.)
Okej, ale pliku nagłówkowym czy w .cpp?
komentarz 26 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
https://pastebin.com/wSRRkT2W

I btw. poczytaj jak dziala dzielenie na pliki i jak dzialaja klasy w jeyku c++
komentarz 26 marca 2020 przez Hyack Nowicjusz (200 p.)

Okej, może inaczej. Wrzuciłem twój kod z pastebina i wygląda to tak:

 

main.cpp

#include "pojazdy.h"
#include <iostream>

using namespace std;





int main()
{
	Pojazdy** poj;
	int size{ 0 }, index{ 0 };
	Petla(poj, size);
	
	print(poj, size);

	wyrejestruj(poj,size,0);
	print(poj, size);
	wyrejestruj(poj,size);


	return 0;

}

 

pojazdy.h

 

#pragma once

#include "pojazdy.h"
#include <iostream>

using namespace std;

void Pojazdy::set_ilosc(int x) { ilosc = x; }

void Pojazdy::dodaj()
{
}

void Pojazdy::Petla(Pojazdy**& p, int& size) {
}

void Pojazdy::print(Pojazdy** pojazdy, int size) {
}


void Pojazdy::wyrejestruj(Pojazdy**& pojazdy, int& size) {
}

void Pojazdy::wyrejestruj(Pojazdy**& pojazdy, int& size, int index) {
}

void Pojazdy::d_pojazd(Pojazdy**& pojazdy, int& size) {

}

int Pojazdy::get_ilosc() { return ilosc; }
string Pojazdy::get_typ() { return typ; }
string Pojazdy::get_marka() { return marka; }
string Pojazdy::get_model() { return model; }
int Pojazdy::get_cena() { return cena; }
void Pojazdy::set_ilosc(int x);

 

pojazdy.cpp

 

#include "pojazdy.h"

#include <iostream>

using namespace std;


void Pojazdy::set_ilosc(int x) { ilosc = x; }

void Pojazdy::dodaj()
{
	cout << "DODAWANIE POJAZDU..." << endl;
	cout << "Podaj typ pojazdu:";
	cin >> typ;

	cout << "Podaj marke pojazdu: ";
	cin >> marka;

	cout << "Podaj model pojazdu: ";
	cin >> model;

	cout << "Dodaj cene pojazdu: ";
	cin >> cena;

}

void Petla(Pojazdy**& p, int& size) {
	char z_dod;// = 'N';
	do {
		d_pojazd(p, size); //odpowiada za dodawnie
		p[size - 1]->dodaj();
		cout << "Czy chcesz zakonczyc dodawanie? Jesli tak, wcisnij Y/N: ";
		cin >> z_dod;

	} while (z_dod == 'N' || z_dod == 'n');//while (p[size]->z_dod == "N" ||p[size]->z_dod == "n");
}

void print(Pojazdy** pojazdy, int size) {
	std::cout << "====================================" << std::endl;
	for (int i{ 0 }; i < size; i++)
		std::cout << "Typ: " << pojazdy[i]->get_typ() << " Marka: " << pojazdy[i]->get_marka() << " Model: " << pojazdy[i]->get_model() << " Cena: " << pojazdy[i]->get_model() << std::endl;
}


void wyrejestruj(Pojazdy**& pojazdy, int& size) {
	for (size_t i{ 0 }; i < size; i++)
		delete pojazdy[i];
	delete[] pojazdy;
	size = 0;
	pojazdy = NULL;
}

void wyrejestruj(Pojazdy**& pojazdy, int& size, int index) {
	if (index < size) {
		Pojazdy** temp = new Pojazdy * [size - 1];
		short int j{ -1 };
		for (size_t i{ 0 }; i < size; i++) {
			if (i != index) {
				j++;
				temp[j] = pojazdy[i];
			}
		}
		delete[] pojazdy;
		--size;
		pojazdy = temp;
	}
	else
		std::cout << "Pamiec zwolniona!" << std::endl;


}

void d_pojazd(Pojazdy**& pojazdy, int& size) {
	Pojazdy** temp = new Pojazdy * [size + 1];
	if (size == 0)
		temp[size] = new Pojazdy;
	else {
		for (int i{ 0 }; i < size; i++)
			temp[i] = pojazdy[i];
		delete[] pojazdy;

		temp[size] = new Pojazdy;
	}
	++size;
	pojazdy = temp;
}

 

I dostaje masę błędów.

komentarz 26 marca 2020 przez DragonCoder Nałogowiec (36,500 p.)
Jasne ze dostajesz mase bledow, bo pojazdy.hpp, mialo byc plikiem.cpp, a nie .h.

W punkt.hpp masz swoja klase

a to jest .hpp

https://pastebin.com/cWhARSky

przectyales link u gory, odnosnie dzielenia na pliku z cpp0x?

Podobne pytania

0 głosów
0 odpowiedzi 540 wizyt
pytanie zadane 17 stycznia 2020 w C i C++ przez Curiosis Użytkownik (540 p.)
0 głosów
1 odpowiedź 261 wizyt
pytanie zadane 11 sierpnia 2018 w C i C++ przez XSPACE Użytkownik (690 p.)
0 głosów
0 odpowiedzi 379 wizyt
pytanie zadane 23 grudnia 2019 w C i C++ przez paszek99 Nowicjusz (140 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...