Pole ve funkci – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pole ve funkci – C / C++ – Fórum – Programujte.comPole ve funkci – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Kenvelo+2
Super člen
12. 11. 2013   #1
-
0
-

Zdravím mám problém s polem 

 mám vytvořenou strukturu a k té bych potřeboval přidal pole ale píše mi to pořád že hodnota výrazu musí být konstantní .. ale já nepotřebuji konstantní hodnotu.

void SadBox
{
	int sett;

	struct Box1
	{
		....
		
	};
	
	cin >> sett;
	Box1 H_Box1[sett]; // Zde píše že sett musí být konstantní 
	
	for (int i= 0; i < sett; i++)
	{
	...
	}
}

Děkuji za radu 

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
z
~ Anonymní uživatel
268 příspěvků
12. 11. 2013   #2
-
0
-

   

struct Box1
{
	TYP *pole;
};
	
cin >> sett;
Box1 H_Box1[sett];
	
for (int i = 0; i < sett; i++)
{
	H_Box1[i].pole = new TYP[velikost];
}

...

for (int i= 0; i < sett; i++)
{
	delete[] H_Box1[i].pole;
	//H_Box1[i].pole = NULL;
}
Nahlásit jako SPAM
IP: 88.101.8.–
Robo
~ Anonymní uživatel
82 příspěvků
12. 11. 2013   #3
-
0
-

#1 Kenvelo
Jasné že to musí byť konštantné. Šak to sú základy programovania. Keď si vytváraš statické pole tak veľkosť toho pola musí byť už dopredu známa

#2 z
Tebe by to tiež nefungovalo. Robíš tú istú chybu. A ešte ktomu nemusíš odstraňovať každý prvok s delete. 
Daj to len raz na celé pole štruktúr a je hotovo

void SadBox(){
	struct Box1{
		char name[20];
		int years;
		double value;
	};

	char *temp[] = {"Robo", "Peto", "Filip", "Majo"};

	int sett;
	cin >> sett;

	Box1 *p = new Box1[sett];

	for(int i = 0; i < sett; i++){
		strcpy(p[i].name, temp[i]);
		p[i].years = i + 25;
		p[i].value = i + 56.6;
	}

	for(int i = 0; i < sett; i++){
		cout << p[i].name << ", " << p[i].years << ", " << p[i].value << endl;
	}

	delete [] p;
}
Nahlásit jako SPAM
IP: 178.253.138.–
vitamin+8
Grafoman
12. 11. 2013   #4
-
+1
-
Zajímavé

#1 Kenvelo

C++ neumoznuje vytvarat dynamicke polia na stacku. V C (C99+) to je mozne pripadne v gcc ak pouzies VLA . Pouzi radsej new/delete alebo rovno vector.

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kenvelo+2
Super člen
12. 11. 2013   #5
-
0
-

#3 Robo
Vím též že musí ... ale já se ptal na to jak udělat pole bez toho aby hodnota předem musel být konstantní. A jestli ses koukl na můj kód určitě vidíš že sem neměl v plánu vytvořit statické pole... 

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
Kenvelo+2
Super člen
12. 11. 2013   #6
-
0
-

#4 vitamin
Díky, mrknu se na to ;) 

Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
Robo
~ Anonymní uživatel
82 příspěvků
12. 11. 2013   #7
-
0
-

#5 Kenvelo
Pýtal si sa, prečo ti nefunguje tvoj kód. Tak som ti odpísal, lebo takto vytváraš statické pole štruktúr. Viem, že si mal v pláne vytvoriť dynamické pole a keď si sa ty pozrel na môj kód, tak si si tam musel všimnúť že ho vytváram dynamicky

Box1 *p = new Box1[sett];

stačí ti tam pozmeniť tento riadok

Nahlásit jako SPAM
IP: 178.253.138.–
z
~ Anonymní uživatel
268 příspěvků
12. 11. 2013   #8
-
0
-

#3 Robo
Jaj, pravda, nečetl jsem pozorně a nedošlo mi v čem je problém.

Nahlásit jako SPAM
IP: 78.156.159.–
vitamin+8
Grafoman
12. 11. 2013   #9
-
0
-

#7 Robo
Kenvelo nevytváral statické premenne. V jeho kóde sú len automatické premenné (existujú ešte statické, dynamické a TLS).

Nahlásit jako SPAM
IP: 195.28.77.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Robo
~ Anonymní uživatel
82 příspěvků
12. 11. 2013   #10
-
0
-

#9 vitamin
Ja viem že má automatické premenné. To statické pole som myslel ako pole so statickou väzbou, ktorá sa alokuje počas prekladu

Nahlásit jako SPAM
IP: 178.253.138.–
Kenvelo+2
Super člen
12. 11. 2013   #11
-
0
-

#10 Robo 

 struct  Box
	{ 
		char fast[4];
	        char slow[20];
		char ba[20];

	}zam;


	
	
	
	struct Box *a = NULL;   
	int n;           
	cin >> n;        
	a = new struct Box[n];  

	for (int i=0; i<n; i++) 
	{
	  a[i];   
	 
	  cout << "\n char fast : ";
	  cin.get();
	  cin.get(a[i].fast,4);
	}

Řešení  samozřejmě paměť uvolňuji  

delete [] a;  
	a = NULL;     
Nahlásit jako SPAM
IP: 89.177.211.–
Díky bohu, že počítače vymysleli muži. Kdyby to byly ženy, tak binární soustavu reprezentují jedničky, nuly a "možná"
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 11 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý