Я нашел фактическую ошибку. Это не изначально мой проект, но я недавно начал работать над этим, чтобы добавить некоторые функции.
Как оказалось, ошибка была довольно тривиальной. После тщательного изучения исходного кода я заметил, что переменная time_t time;
уже была объявлена. Когда я попытался назначить now = time(NULL);
, вышеупомянутая переменная мешала вызову функции.
В этом случае сообщение об ошибке term does not evaluate to a function taking 1 arguments
от VS2010 довольно отвлекает. Если аргумент опущен, он изменится на term does not evaluate to a function taking 0 arguments
. Из этих сообщений я предположил, что либо другая функция с именем time()
из другого включенного файла получила вызов, либо что VS2010 имеет нестандартную реализацию time()
.
Вызов функции - как предложено в комментариях пользователя3853544 - с now = (::time)(NULL);
сигнализировал компилятору, что я ссылаюсь на функцию вместо ранее объявленной переменной. Другим решением может быть переименование нарушающей переменной, чтобы он не сталкивался с именем функции.
PS: Я воссоздал проблему и попытался скомпилировать ее на Ubuntu. Сообщение об ошибке от gcc
является более информативным и точным:
$ cat sample.c
#include <time.h>
int main(void) {
time_t time = 0;
time_t now;
now = time(NULL);
return 0;
}
$
$ gcc sample.c
sample.c: In function ‘main’:
sample.c:6:8: error: called object ‘time’ is not a function or function pointer
now = time(NULL);
^
sample.c:4:9: note: declared here
time_t time = 0;
^
Компиляция с MSVC 2015 без ошибок. – Stargateur
@ Начальник: Нет, по умолчанию в MSVC нет. Поведение MSVC в значительной степени аналогично поведению любого другого компилятора: язык зависит от расширения файла или может быть указан вручную. – AnT
У вас есть определенная пользователем функция времени (...)? – user3853544