调用对象'char *'类型不是函数或函数指针

时间:2012-06-20 12:24:18

标签: c++ c xcode time

我有这个函数,它应该为给定的char *:

设置一定的时间格式
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。

6 个答案:

答案 0 :(得分:12)

您的函数参数time是指向char的指针。

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

  

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

基本上,您通过使用同名的本地变量隐藏了time函数。我建议您更改功能参数的名称。

答案 1 :(得分:5)

功能参数

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

隐藏time()功能。重命名参数。

答案 2 :(得分:2)

static void timeStamp(char* time)  

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

答案 3 :(得分:1)

函数time也是timeStamp函数的参数名称。编译器尝试将char *参数调用为函数。

答案 4 :(得分:1)

您已重新定义了符号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);
    // ...
}

答案 5 :(得分:0)

由于time是您无法调用的char*,请查看您的参数列表。

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