5 votes

l'objet appelé de type 'char*' n'est pas une fonction ou un pointeur de fonction

J'ai cette fonction qui est censée définir un certain format de temps pour le char* donné :

static void timeStamp(char* time)
{
  time(&strTime);<---ERROR
  curTime = std::localtime(&strTime);
  strftime(time, 8, "%H:%M::", curTime);    
}

strTime et curTime ont été déclarés comme ceci :

tm* curTime; 
time_t strTime;

mais pour une raison quelconque, j'ai :

called object type 'char*' is not a function or function pointer

sur l'endroit marqué.

Vous savez pourquoi ?

J'utilise xCode d'ailleurs.

13voto

Dancrumb Points 11918

Votre paramètre de fonction time est un pointeur sur un char.

Cependant, dans le corps de votre fonction, vous essayez de la traiter comme s'il s'agissait d'une fonction que vous pouvez appeler. C'est ce que l'erreur dit...

l'objet de type char * n'est pas une fonction ou un pointeur de fonction [par conséquent, je ne peux pas l'appeler].

Essentiellement, vous avez caché le time en ayant une variable locale du même nom. Je vous recommande de changer le nom du paramètre de votre fonction.

5voto

Daniel Fischer Points 114146

Le paramètre de fonction

static void timeStamp(char* time)
{
  time(&strTime);<---ERROR
  // ...
}

ombres le time() fonction. Renommez le paramètre.

2voto

abhinav8 Points 2047
static void timeStamp(char* time)  

ici, ceci char* time est de cacher la fonction time() .vous devrez le renommer.

1voto

Gart Points 1276

La fonction time est également le nom de votre paramètre à timeStamp fonction. Le compilateur essaie d'appeler le paramètre char* comme s'il s'agissait d'une fonction.

1voto

Richard J. Ross III Points 33152

Vous avez redéfini le symbole time pour réparer, essayez ce qui suit :

static void timeStamp(char *time)
{
    time_t strTime;

    { // brackets here are important!
        extern time_t time(time_t *);
        time(&strTime);
    }

    // ...
}

Nous ajoutons des parenthèses ici pour ajouter une portée supplémentaire à la fonction, puis nous indiquons au compilateur que hey, in this block, time is not a variable, its a function et cela permet au compilateur de fonctionner correctement avec votre nom de variable actuel.

En option, vous pouvez également utiliser le spécificateur d'espace de nom global, comme ceci :

static void timeStamp(char *time)
{
    ::time(&strTime);
    // ...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X