称为对象 'char* '类型不是函数或函数指针

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

本文关键字:函数 指针 char 对象 类型      更新时间:2023-10-16

我有这个函数,它应该为给定的字符*设置一定的时间格式:

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

strTime 和 curTime 是这样声明的:

tm* curTime; 
time_t strTime;

但出于某种原因,我得到:

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

在标记的地方。

知道为什么吗?

顺便说一下,我使用 xCode。

函数参数time是指向字符的指针。

但是,在您的函数体中,如果它是您可以调用的函数,您将尝试处理它。这就是错误所说的...

类型 char * 的对象不是函数或函数指针 [因此,我不能调用它!

从本质上讲,您通过具有相同名称的局部变量隐藏了time函数。我建议更改函数参数的名称。

函数参数

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

隐藏time()函数。重命名参数。

static void timeStamp(char* time)  

在这里,这个char* time参数隐藏了函数time() .您将需要重命名它。

您已重新定义符号time ,要修复,请尝试以下操作:

static void timeStamp(char *time)
{
    time_t strTime;
    { // brackets here are important!
        extern time_t time(time_t *);
        time(&strTime);
    }
    // ...
}
我们

在这里添加括号以向函数添加额外的作用域,然后我们告诉编译器hey, in this block, time is not a variable, its a function,这也允许编译器与您当前的变量名正常工作。

(可选)还可以使用全局命名空间说明符,如下所示:

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

函数time也是函数timeStamp参数的名称。编译器尝试调用 char* 参数,就好像它是一个函数一样。

因为time是不能调用的char* - 请查看参数列表。

只需重命名它,您的问题就会消失。