2010-02-20 4 views
0

lorsque je tente de compiler mon code ci-dessous je reçois les erreurs suivantes:Déréférencer question dans C

erreur C2440: '> =': ne peut pas convertir de 'double *' à 'double'

erreur C2440 : '> =': ne peut pas convertir de 'double *' à 'double'

Je crois que je suis tout déréférencement correctement

#define TRUE 1 
#define FALSE 0; 

#include <stdio.h> 

typedef struct Con{ 
    double samTime[2]; 
    double sen[2]; 
    int test[2]; 
} CON, *CON_PTR; 

void GM(double **TTXY) { 
    int NoS; 
    int numOfSen = 2; 
    int startTime =0; 
    CON con; 

    if((con = (CON_PTR) malloc(numOfSen*sizeof(CON)))==NULL) { 
    printf(“Malloc failed\n”); 
    exit(1); 
    } 
    for (NoS=0;NoS<numOfSen;NoS++) { 
    con[NoS].samTime[0] = startTime; 
    con[NoS].samTime[1] = startTime; 
    con[NoS].sensor[0] = 0; 
    con[NoS].sensor[1] = 0; 
    con[NoS].test[0] = FALSE; 
    con[NoS].test[1] = FALSE; 
    } 

    if (con[NoS].samTime[0] >= TTXY[1]) { 
    con[NoS].test[0] = TRUE; 
    } 
    if (con[NoS].samTime[1] == TTXY[1]) { 
    con[NoS].test[1] = TRUE; 
    } 
} 
+1

Postez le code actuel. Il n'y a pas de définition de 'con' ou' TTXY' dans l'échantillon que vous avez posté. De plus, la ligne 'int NoS' est mal formée. – dirkgently

+1

#defining FALSE pour contenir un point-virgule est un bug qui risque de se produire. – bk1e

Répondre

1

D'abord, il y a un point-virgule manquant

int NoS 

et votre fonction principale est pas correct, ce doit être l'un des

int main() 
int main(int argc, char **argv) 
void main() // not standard but allowed by some compilers (with warning) 

et, pas à votre question, vous n'êtes pas déréférencer correctement, car votre tableau TTXY est bidimensionnel. Il devrait donc être quelque chose comme

if (con[NoS].samTime[0] >= TTXY[1][some other number]) { 

tout ce qui fonctionne pour votre code. Et vous devriez utiliser des noms plus descriptifs pour vos variables si d'autres sont supposés comprendre le code.

Si TTXY devrait vraiment être un tableau à une dimension, vous n'avez pas besoin de passer par référence (function(&TTXY)), en passant la valeur de pointeur (function(TTXY)) sera suffisant et plus lisible.

1

TTXY est déclarée comme deux **, si TTXY [1] est double *, pas double, vous ne pouvez donc pas comparer TTXY [1] avec con [NoS] .samTime [0].

Je suppose que vous avez peut-être une faute de frappe dans la tête de la fonction, essayez de la modifier pour annuler la fonction main (double * TTXY)?

+0

@anon Je vous recommande de changer le nom de la fonction, car l'utilisation de 'main' peut causer des ambiguïtés. – ZelluX

+0

Les signatures standard _only_ pour 'main' sont:' int main (void) 'et' int main (int argc, char ** argv) '. 'void main (double ** TTXY)' ne fonctionnera jamais. – dirkgently

1

Pourquoi votre fonction principale ont la signature

(int)(double**) 

Pour être un programme valide C, principal doit avoir la signature:

(int)(int, char**) 

Si vous voulez principal de traiter ses arguments d'une autre manière , alors vous devez les convertir vous-même.

0

Il existe quatre erreurs de syntaxe dans votre programme.

  1. int Nos - manque le point-virgule.
  2. con - cette variable n'est pas déclarée avant utilisation.
  3. sensor n'est pas un memeber de struct Con.
  4. TTXY est un pointeur sur le pointeur vers double pas point à double, vous devez donc utiliser *TTXY[1] pour accéder au premier point double par le premier double pointeur dans le tableau à double pointeur TTXY.

Note:

  1. Normalement, vous devez suivre la forme standard de la fonction main mais pas défini votre propre version.The version normale de main fonction doit être int main(void) ou int main(int argc, char *argv[]).
  2. Vous devez inclure <stdlib.h> pour que gcc soit assez heureux de ne pas vous avertir.