Ik geraak er niet uit om mijn struct in
main.c te gebruiken.
Kan iemand mij zeggen wat ik verkeerd doe?

<ledcode.h>

 
extern struct CommandString cs1;

<ledcode.C>

 
#include "ledcode.h" 

struct CommandString
  {
    char Initstring[10];  // "00000" + <SOH> (0x01) + Signtype 'z' + adr "00" + <STX> 0x02
    char Commandcode;     // Code default='A' for Write text command
    char Filenr;          // Store in file x default='A'
    char Modefieldcode;   // 0x1b optional
    char Positioncode;    // Only needed when Modefield is used default=0x20
    char Standardmode;    // One of the Standard modes ROTATE (default=HOLD)
    char Special;         // Optional,If standardmode=0x6e this is SPECIAL MODE code
    char Speed;           // Speed 1(slow) - 5(fast) Default BTSPD5
    char colorcode;       // Color control code 0x1c Do not change
    char Charcolor;       // 0x31=RED etc default 0x35 dim green
    char test[64];       // Ascii text end with 0
    char EOT;             // End of transmission  = 0x04
  } cs1={ { 0,0,0,0,0,1,'z','0','0',2},'A','A',0x1b,0x20,0x62,0,0x19,0x1c,0x35,{0},4};

<main.c>


#include "ledcode.h" 

void main()
 {
   char a;
   a=cs1.EOT;    <----foutmelding
 }

De variabele a heeft geen type.

edit:
Inmiddels dus wel...

[Bericht gewijzigd door Boudie op (33%)]

toch wel maar niet in voorbeeld gezet , dus das jammer genoeg het probleem niet.

Nergens een verwijzing naar ledcode.c, een extern struct moet de boel wel kunnen vinden.

Maar wat is de link met CO?

En hoe kan ik dat doen?

De link met CO dat dit voor een project
is met een PIC ,dat communiceert met een lichtkrant
code is dus in mikroc.

[Bericht gewijzigd door tubos op (72%)]

Een cursus C?

Maar dat valt buiten CO, dergelijke topics dus ook.

[Bericht gewijzigd door Henry S. op (25%)]

Maar Henry.s, het is immers wel om een lichtkrant aan te sturen met een PIC.

Tubos, welke foutmelding krijg je in mikroC?

Je gebruikt de struct voordat deze gedeclareerd is. Dit kan enkel als je een pointer gebruikt (de compiler moet immers weten hoeveel ruimte hij hier voor moet reserveren).

Zet de definitie van struct CommandString gewoon in ledcode.h, waar deze hoort.

Op 2 januari 2010 18:34:39 schreef Mathieuke:
Maar Henry.s, het is immers wel om een lichtkrant aan te sturen met een PIC.

Maar dit is een gewone fout die je maakt als je C niet goed beheerst, en CO is geen forum voor algemene C vragen.

Op 2 januari 2010 18:37:32 schreef Gyrbo:
Zet de definitie van struct CommandString gewoon in ledcode.h, waar deze hoort.

Of via een include in .h maar dat is rommelig.

[Bericht gewijzigd door Henry S. op (28%)]

@mathieuke
Error: Undefined struct

@Gyrbo
Kan ik de waarden reeds toekennen in ledcode.h ?

Je hebt nu de typedefinitie alleen in je .c bestand staan. Wat je moet doen is het type (struct CommandString) in de .h file te definieren, de werkelijke declaratie (struct CommandString cs1 = ...) in je .c en dan in je .h daarnaar te verwijzen met een extern declaratie.

<ledcode.h>


#ifndef __LEDCODE_H__
#define __LEDCODE_H__
struct CommandString
  {
     char Initstring[10];  // "00000" + <SOH> (0x01) + Signtype 'z' + adr "00" + <STX> 0x02
    char Commandcode;     // Code default='A' for Write text command
    char Filenr;          // Store in file x default='A'
    char Modefieldcode;   // 0x1b optional
    char Positioncode;    // Only needed when Modefield is used default=0x20
    char Standardmode;    // One of the Standard modes ROTATE (default=HOLD)
    char Special;         // Optional,If standardmode=0x6e this is SPECIAL MODE code
    char Speed;           // Speed 1(slow) - 5(fast) Default BTSPD5
    char colorcode;       // Color control code 0x1c Do not change
    char Charcolor;       // 0x31=RED etc default 0x35 dim green
    char test[64];       // Ascii text end with 0
    char EOT;             // End of transmission  = 0x04
  };

extern struct CommandString cs1;
#endif

<ledcode.c>


#include "ledcode.h"
struct CommandString cs1 = { { 0,0,0,0,0,1,'z','0','0',2},'A','A',0x1b,0x20,0x62,0,0x19,0x1c,0x35,{0},4};

<main.c>


#include "ledcode.h"
void main()
 {
   char a;
   a=cs1.EOT;    <----geen foutmelding meer
 }

Zie de headerfile als interface naar de buitenwereld. Alle informatie die je in je buiten je bijbehorende .c file nodig hebt (zoals functies, types of globale variablen waar je bij wilt kunnen) moeten daarin gedeclareerd worden.
Het toekennen van de waarden hoort dus niet in je header file. Daar vertel je alleen hoe het type (struct CommandString) eruit ziet en dat er een variable van dit type is met de naam cs1.

De #ifndef __LEDCODE_H__ en #define __LEDCODE_H__ zijn om te voorkomen dat je compiler gaat mekkeren als je de .h file meerdere keren zou includen in verschillende bestanden.

[EDIT] Te laat, zit post van Springuin voor de oplossing :)

[Bericht gewijzigd door Gyrbo op (94%)]

Bedankt Gyrbo en Springuin , dat was het.
Bedankt Henry om niet vroegtijdig topic te sluiten.
Ik weer wat geleerd dank zij CO

Op 2 januari 2010 19:21:09 schreef tubos:
Bedankt Henry om niet vroegtijdig topic te sluiten.
Ik weer wat geleerd dank zij CO

Probeer het de volgende keer via een meer op C gerichte website of boek (K&R!).