Permalänk
Medlem

struct array[][] problem (C)

hej

håller på med ett kortspel program i C(spelet 31),
har fått lite ptoblem med struct arrayer.
här är funktionen som det blir fel på, det funkar om jag skriver koden i main men när jag lägger den i en funktion så får jag

230 D:\Dev-Cpp\Cprograms\kortlek.c
invalid use of array with unspecified bounds

deck player[p][hand] //struckt array med p=antal spelare, hand=spelarens kort, deck=struct med kortets färg och värde

int count(deck player[][], int p, int hand){ int count=0,temp,i; for(i=0;i<hand;i++){ if(i<hand-1 && player[p][i].suit == player[p][i+1].suit){ if(player[p][i].value==1) //om kortet är ett ESS count+=11; //får 11 poäng if(player[p][i].value>10) count+=10; else count+=player[p][i].value; } if(i<hand-1 && player[p][i].value>player[p][i+1].value) temp=player[p][i].value; if(temp>count) count=temp; } return count; }

antagligen så har jag skickat in fel grejjer till funktionen eftersom jag bara får "invalid use of array with unspecified bounds " när koden är i funktionen men inte om jag lägger den i main,
man vad är felet?????

Visa signatur

Intel 2500k || Asus P8P67 Pro || 2x4GB Corsair Vengeance || MSI GTX680 || Corsair AX650W || Win 7 64-bit

Permalänk
Medlem

Vilken rad är det som felmeddelandet hamnar på?

Sen så kan man väl inte deklarera arrayer dynamiskt på det sättet? Jag har alltid trott att man måste använda new för att få antalet dynamiskt.

Dev-C++ klagar på att båda [] är tomma i funktionen, den vill ha åtminstonde en ifylld.

Och som en sista parantes, använd [code] och [/code] när du klistrar in kod.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Don_Tomaso
Vilken rad är det som felmeddelandet hamnar på?

Sen så kan man väl inte deklarera arrayer dynamiskt på det sättet? Jag har alltid trott att man måste använda new för att få antalet dynamiskt.

Dev-C++ klagar på att båda [] är tomma i funktionen, den vill ha åtminstonde en ifylld.

Och som en sista parantes, använd [code] och [/code] när du klistrar in kod.

ok
den klagar på alla rader där player[][] arrayen finns
förstår inte vad du menar med dynamiskt
men [] är ju inte tomma int p och int hand följer ju med !?

det funkar ju om man skickar t.ex void funktion( int array[], int max)
där max är max värdet i []
jag tycker det jag har gjurt är samma sak!?

Visa signatur

Intel 2500k || Asus P8P67 Pro || 2x4GB Corsair Vengeance || MSI GTX680 || Corsair AX650W || Win 7 64-bit

Permalänk
Medlem

Hos mig så klagar Dev-C++ på alla funktioner där jag har array[][] som en parameter, den vill att jag definierar mängden på den första "dimensionen". Alltså:
array[10][] istället för array[][]. Varför vet jag inte.

Sen det där med definieringen.

deck player[p][hand]; // tror jag inte är så lyckat deck **player = new deck[p][hand]; // är nog ett säkrare kort, men då får du ändra int count(deck player[][], int p, int hand){ // till int count(deck **player, int p, int hand){

Nu är jag inte så het på C++, men det är mina teorier.

Permalänk
Medlem

Problemet är att C (och C++) skickar arrayer som funktionsparametrar till funktionen som pekare, d.v.s. en minnesadress. Om du t.ex. har en funktion foo(int bar[ ]) så fungerar det utmärkat eftersom parametern tolkas som int * bar. Då blir uttrycket bar[2] definierat som *(bar + 2) inuti funktionen.

Antag nu att du deklarerar en array int bar[10] [10]; och vill skicka den som argument i en funktion foo(int bar [ ] [ ]);.

Problemet om du skickar en tvådimensionell array som argument är att den anropade funktionen foo() inte kan "veta" att uttrycket bar [2] [3] skall tolkas som *(bar + 3 * 10 + 2). Eftersom arrayens deklaration inte skickas med till funktionen är uttrycket med två index odefinierat.

Visa signatur

perga

Permalänk
Medlem

ok om jag ändrar till int count(deck **player, int p, int hand){

hur använder man då **player; i själva funktionen ?
alltså hur skriver jag t.ex

if(player[p][i].value==1)
count+=11;

Visa signatur

Intel 2500k || Asus P8P67 Pro || 2x4GB Corsair Vengeance || MSI GTX680 || Corsair AX650W || Win 7 64-bit

Permalänk
Medlem

Du skriver det precis som vanligt.

Permalänk
Medlem

ok nu behöver jag hjälp
Don_Tomaso jag testade din teori men det funkade inte (tror inte C funkar på samma sätt som C++)
så hur ska jag göra för att skicka en 2d array till en funktion och sedan använda den i funktionen ???

EDIT: de lungt jag kom på hur man gör

Visa signatur

Intel 2500k || Asus P8P67 Pro || 2x4GB Corsair Vengeance || MSI GTX680 || Corsair AX650W || Win 7 64-bit