Just nu i M3-nätverket
Jump to content

Funktion och struct fråga


gundam

Recommended Posts

Jag får ett fel som jag inte förstår vad som är fel.

 

Mitt program:

 

#include <stdio.h>

define N_TAL 5

 

/*******function************/
[color="#ff0000"]void test_funktion(tal_type * pek)[/color]
{
/* gör inget */
}

/*******struct************/
typedef struct
{
   int[N_TAL]; 
} tal_type;

/*******main***********/
void main()
{
printf(" test ");
}

 

Jag får följande kompilerings fel

syntax error :missing ')' befroe '*'

syntax error :missing '{' befroe '*'

syntax error :missing ')'

expected '(' to follow 'pek'

 

 

 

[inlägget ändrat 2006-11-24 21:03:02 av gundam]

[inlägget ändrat 2006-11-24 21:04:02 av gundam]

Link to comment
Share on other sites

Så här kan du skriva:

 

#define N_TAL 5

/*******struct************/
typedef struct
{
int x[N_TAL];
} tal_type;

/*******function************/
void test_funktion(tal_type * pek)
{
/* gör inget */
}

/*******main***********/
int main()
{
printf(" test ");
}

 

[inlägget ändrat 2006-11-24 23:27:52 av lizardKng]

Link to comment
Share on other sites

Va bra!

 

En C-kompilator läser från början till slut, inget mer än så.

 

En kompilator kan ju vara smartare än så men så funkar alla C/C++-kompilatorer.

 

C++/CLI ändrar dock på detta.

 

För närvarande stöds C++/CLI bara av VS 2005 från Microsoft. Jag hoppas att denna utökning blir en riktig ISO-standard, C++ är värd denna utökning, så bra är den tycker jag.

 

http://en.wikipedia.org/wiki/C++/CLI

http://www.ecma-international.org/publications/standards/Ecma-372.htm

 

Och jag ska tillägga att jag är definitivt ingen M$-fan på så vis. Detta är dock en så ohyggligt bra sak de gjort, inklusive .NET2, att det verkligen borde bli en standard av det.

 

I samma veva kan man ju skippa boost och stora delar av STL som ändå bara är till för den akademiska eliten (personlig åsikt).

 

Vi stackars kod-jon som måste producera fungerande lösningar vill ha saker som MS implementation av .NET. Där finns användbara varianter av delar av STL men helt utan denna enorma komplexitet som STL lider av.

 

För ett par år sedan trodde jag inte jag skulle säga detta men med åren blir man mer pragmatisk, skiten ska funka, glansiga broshyrer kan man göra ändå.

 

Jag tycker verkligen om standarder men vad gäller C++ tycker jag det har stannat i grottstadiet.

 

Boost och större delen av STL är enligt min mening oanvändbart p g a sin komplexitet och att det finns så otroligt många fallgropar.

 

Dock är C++ template metaprogramming intressant i sig, men enbart på en rätt akademisk nivå.

 

Jag vill se en ISO-standard av C++/CLI och .NET2 (de generella delarna, förstås).

 

Det skulle lyfta C++ till den nivå språket förtjänar.

 

[inlägget ändrat 2006-11-25 02:45:44 av lizardKng]

Link to comment
Share on other sites

Hej jag vill lägga till lite saker på mitt program där det är grönt färg

 

#define N_TAL 5

 

/*******struct************/

typedef struct

{

int ab;

}ab_type;

 

typedef struct

{

ab_type x[N_TAL];

} tal_type;

 

/*******function************/

void test_funktion(tal_type * pek)

{

int i;

for (i=0; i<=N_TAL; i++)

{

pek->x=0;

}

}

 

/*******main***********/

int main()

{

tal_type * pek;

test_funktion(pek);

}

 

Det som jag vill göra är att jag sätter array x till 0 på alla ställe.

Men min kompilator godkänner inte :(

Känner mig lite vilse undrar om du kan hjälpa mig?

I C programmering är det nödvändligt att ger array någon värde vid start?

 

[inlägget ändrat 2006-11-25 18:14:10 av gundam]

Link to comment
Share on other sites

Det här borde funka bättre:

 

#define N_TAL 5

/*******struct************/
typedef struct
{
int ab;
}ab_type;

typedef struct
{
ab_type x[N_TAL];
} tal_type;

/*******function************/
void test_funktion(tal_type * pek)
{
int i;
for (i=0; i<=N_TAL; i++)
{
pek->x[i][color="#ff0000"].ab[/color]=0;
}
}

int main()
{
[color="#ff0000"]tal_type pek;
test_funktion(&pek);[/color]
}

 

[inlägget ändrat 2006-11-26 18:40:28 av lizardKng]

Link to comment
Share on other sites

#define N_TAL 5

 

/*******struct************/

typedef struct

{

int ab;

int cd;

}ab_type;

 

typedef struct

{

ab_type x[N_TAL];

} tal_type;

 

/*******function************/

void test_funktion(tal_type * pek)

{

int i;

for (i=0; i<=N_TAL; i++)

{

pek->x.ab=0;

pek->x.cd=0;

}

}

 

int main()

{

tal_type pek;

test_funktion(&pek);

}

 

jag förstår inte varför man ska har ab efter x.ab.

Vad är det skillnad om man har xcd enligt koden?

 

 

[inlägget ändrat 2006-11-26 19:41:18 av gundam]

Link to comment
Share on other sites

Nu har din ab_type två fält: Ett kallat ab och ett kallat cd.

 

Kanske namnen förvirrar?

 

Om du istället skriver

 

typedef struct
{
int longitud;
int lattitud;
}kordinat;

typedef struct
{
kordinat k[N_KORDINATER];
} kontrollista;

void nollstall(kordinatlista * k_lista)
{
int i;
for (i=0; i<=N_KORDINATER; i++)
{
k_lista->k[i].longitud=0;
k_lista->k[i].lattitud=0;
}
}

 

kanske det blir klarare?

 

[inlägget ändrat 2006-11-27 06:31:14 av lizardKng]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...