Forum » Programiranje » [c++] dvosmerno povezan seznam
[c++] dvosmerno povezan seznam

upirna ::
Tkole. Spravil sem se narest dvosmerni povezan sezanm v c++. Načrt je takle: Defineram 3 kazalce (na prvo vozlišče, na trenutno vozlišče, na zadnje vozlišče). Skratka mislm da v tem ni problem, ampak preprosto mi ne rata napisat sintakse v Visual C++ 2003. Prosil bi nekoga, da malo pogleda kodo in pove kje je napaka (error C2501: 'prejsnji' : missing storage-class or type specifiers mi javi Visual Studio). 
.
 
Hvala!
 
 
  
.
Hvala!
// kazalci.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
struct Voz{
	int id;
	Voz* naslednji;
	Voz* prejsnji;
	Voz* trenutni;
};
//deklaracije osnovnih tipov
Voz* prejsnji;
Voz* naslednji;
Voz* trenutni;
prejsnji=0;
naslednji=0;
trenutni=0;
int main()
{
		
	for(int i=0; i<10; i++){
		trenutni = new Voz;
		trenutni->id = i;
		trenutni->trenutni = trenutni;		
		trenutni->prejsnji = prejsnji;
		trenutni->naslednji = prejsnji->trenutni;
		
	}	
	
	
	system("pause");
	return 0;
}
 [to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]
- spremenil: upirna ()

OwcA ::
Na prvi vrg uča bi rekel, da je problem v ciklični odvisnosti. V definiciji Voz se že sklicuješ na Voz. Poskusi z ločeno deklaracijo. 
Otroška radovednost - gonilo napredka.

snow ::
Pomisli kam kaze 'prejsni' v prvi iteraciji. In v vseh naslednih. Na 0. Nikoli ne spremeniš globalni 'prejsni'.
 
prejsnji->trenutni... je pa bog ve kje.
prejsnji->trenutni... je pa bog ve kje.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins

sid_dabster ::
Ok, snow, BW, ocitno se fantu program se prevede ne, tako da je potrebno najprej razresiti ta misterij.
 
Torej, upirna, naredi sledece:
 
prva stvar: Povej, v kateri vrstici je napaka.
Druga stvar: poglej, ce stvar prevajas kot C++ (ker v C ima, kot najverjetneje ze ves, keyword struct nekoliko drugacen pomen).
To, da se v definiciji Voz ze sklicujes na Voz, bi v C++ moralo delovati, v ANSI C-ju pa bi bilo potrebno napisati npr.takole:
 
  
Torej, upirna, naredi sledece:
prva stvar: Povej, v kateri vrstici je napaka.
Druga stvar: poglej, ce stvar prevajas kot C++ (ker v C ima, kot najverjetneje ze ves, keyword struct nekoliko drugacen pomen).
To, da se v definiciji Voz ze sklicujes na Voz, bi v C++ moralo delovati, v ANSI C-ju pa bi bilo potrebno napisati npr.takole:
typedef struct _voz{
  int          id;
  struct _voz* naslednji;
  struct _voz* prejsnji;
  struct _voz* trenutni;
} Voz;
 Fallen beyond all grace deeper and deeper
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)

sid_dabster ::
OK, bw, kaj sm zajebu 
 
 
 Fallen beyond all grace deeper and deeper
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)

TBit ::
Jst napako vidim predvsem v tem, da kazalcem nastavlja vrednos izven kode kjer se program izvaja.
Zato premakni ukaze
prejsnji=0
...
...
v funkcijo Main() ter compiler bi moral prevesti program.
Zato premakni ukaze
prejsnji=0
...
...
v funkcijo Main() ter compiler bi moral prevesti program.

sid_dabster ::
U, tiboga, pa res... Sploh nisem opazil  
 
 
 Fallen beyond all grace deeper and deeper
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)

sid_dabster ::
 
 Fallen beyond all grace deeper and deeper
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)
The sound of her own blood dripping
Like sacred tears from a bleeding rose...( Embraced, Within)

Gundolf ::
Naslednjič upirna, compiler poleg vrste napake vedno vrne tudi mesto napake. Zelo pomembna informacija - v bistvu celo bolj kot vrsta napake ;) 

upirna ::
Hvala za pomoč, rešitev je po vaših navodilih taka:
 
  
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
using namespace std;
struct Voz{
	int id;
	Voz* naslednji;
	Voz* prejsnji;
	Voz* trenutni;
};
//deklaracije osnovnih tipov
Voz* prejsnji;
Voz* naslednji;
Voz* trenutni;
int main()
{
	prejsnji=0;
	naslednji=0;
	for(int i=0; i<10; i++){
		trenutni = new Voz;
		trenutni->id = i;
		trenutni->trenutni = trenutni;		
		trenutni->prejsnji = prejsnji;
		if(prejsnji!=0){
			trenutni->naslednji = prejsnji->trenutni;
		}
		prejsnji = trenutni;
	}	
	
	
	system("pause");
	return 0;
}
 [to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]
Vredno ogleda ...
| Tema | Ogledi | Zadnje sporočilo | |
|---|---|---|---|
| Tema | Ogledi | Zadnje sporočilo | |
| » | DIJKSTROV_ALGORITEMOddelek: Programiranje | 2333 (1567) | krneki0001 | 
| » | enojno povezan seznam -izpis nazajOddelek: Programiranje | 3987 (3527) | Randomness | 
| » | pomoc pri skladuOddelek: Programiranje | 1459 (1384) | NoUse4AName | 
| » | [C++] NULL: Undeclared identifier - HELP!Oddelek: Programiranje | 1337 (1275) | CCfly | 
| » | c++ header fileOddelek: Programiranje | 949 (908) | Vesoljc |