Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 称为对象';字符*';类型不是函数或函数指针_C++_C_Xcode_Time - Fatal编程技术网

C++ 称为对象';字符*';类型不是函数或函数指针

C++ 称为对象';字符*';类型不是函数或函数指针,c++,c,xcode,time,C++,C,Xcode,Time,我有一个函数,它应该将特定的时间格式设置为给定的字符*: static void timeStamp(char* time) { time(&strTime);<---ERROR curTime = std::localtime(&strTime); strftime(time, 8, "%H:%M::", curTime); } 但出于某种原因,我得到: called object type 'char*' is not a function or

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

static void timeStamp(char* time)
{
  time(&strTime);<---ERROR
  curTime = std::localtime(&strTime);
  strftime(time, 8, "%H:%M::", curTime);    
}
但出于某种原因,我得到:

called object type 'char*' is not a function or function pointer
在标记的地方

知道为什么吗


顺便说一句,我正在使用xCode。

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

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

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

函数参数

static void timeStamp(char* time)
{
  time(&strTime);<---ERROR
  // ...
}
静态无效时间戳(char*time)
{

time(&strTime);函数参数
time
是指向字符的指针

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

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


本质上,您已经通过使用同名的局部变量隐藏了
时间
函数。我建议更改函数参数的名称。

您已经重新定义了符号
时间
,若要修复此问题,请尝试以下操作:

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

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

    // ...
}
我们在这里添加括号,为函数添加额外的作用域,然后告诉编译器,在这个块中,时间不是变量,它是函数,这也允许编译器使用当前变量名正常工作

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

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

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

如果愿意,您也可以将时间声明为函数中不同作用域内的外部函数。@RichardJ.RossIII这应该是头文件的工作。@glglglgl否,当您有同名变量时就不需要了。显然,您还没有阅读
extern
…I的文档读过这些,我觉得这不是解决问题的好办法。我解释过。很好,简短的解释。好的工作。我觉得这是C++中的一个缺陷。为什么函数在同一个命名空间中是变量,但不管是哪种方式,好的工作。@下流者请解释。这完全有效,而且工作得很好。不是一个好的I。dea,IMO。如果一个实现选择将其作为一个
stdcall
,或者任何实现用来做的事情,该怎么办?IMO这些类型的声明应该严格地驻留在头文件中。@glglglgl这是C中的必要实践,OP将问题标记为。是的,时间是在头文件中声明的,但标准也需要时间d库,当这种情况发生变化,我的代码中断时,你可以回来告诉我我的代码是错误的。我完全可以想象一个库将
time
声明为
time\t stdcall time(time\t*)
而不是默认的
cdecl
。这是一种混合堆栈的完美方式,没有编译器警告会通知您。即使没有发生这种情况,在我看来,这种解决方案也不如只重命名参数。@glglglgl您有没有阅读我的其余答案?我添加了一条关于在C中使用全局命名空间的注释不,我想不是。这就是为什么代码> STD::时间(和TM)< /> >(与 Time:Time:Time>)相比,纳瓦兹是最好的。@ C++中的最后一个。OP应该告诉我们HW是否想要使用C或C++。
static void timeStamp(char* time)