Не может создать крутящий момент после перехода на Ubuntu 18.04 - PullRequest
0 голосов
/ 11 мая 2018

После установки Ubuntu 18.04 я не могу собрать программное обеспечение крутящего момента.В Ubuntu 16.04 такой ошибки не было.

make[4]: Entering directory '/home/socrates/torque-6.1.2/src/lib/Libattr'
g++ -DHAVE_CONFIG_H -I. -I../../../src/include  -I../../../src/include
`xml2-config --cflags` -Wno-implicit-fallthrough -std=gnu++11  
-g -fstack-protector -Wformat -Wformat-security -DFORTIFY_SOURCE=2
-W -Wall -Wextra -Wno-unused-parameter -Wno-long-long -Wpedantic -Werror -Wno-sign-compare
-MT req.o -MD -MP -MF .deps/req.Tpo -c -o req.o req.cpp  

req.cpp: In member function ‘int req::set_from_submission_string(char*, std::__cxx11::string&)’:  
req.cpp:1057:23: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]  

    else if (current != '\0')

                        ^~~~  
Makefile:521: recipe for target 'req.o' failed  
make[4]: *** [req.o] Error 1  

1 Ответ

0 голосов
/ 12 мая 2018

g ++ в Ubuntu 16.04 по умолчанию является компилятором C ++ 03, если параметр -std не указывает другую более новую версию C ++. g ++ в Ubuntu 18.04 по умолчанию является компилятором C ++ 14, там сравнение указателя с int (приведено из char '\0') недопустимо.

Я думаю, что код if (current != '\0'), где current - указатель, является подозрительным и, возможно, это ошибка Должно быть

if (*current != '\0')

Или

if (current != 0)  // before C++11
if (current != nullptr) // since C++11
if (current) // for both before and since C++11

Невозможно без контекста (MCVE) решить, следует ли использовать current или *current.

UPDATE

Я посмотрел код крутящего момента 6.1.2. Определенно, есть ошибка.

char       *current;
// ...
this->task_count = strtol(submission_str, &current, 10);
//...
if (*current == ':')
  current++;
else if (current != '\0') // BUG is here, it must be (*current != '\0')
  {
  error = "Invalid task specification";
  return(PBSE_BAD_PARAMETER);
  }
...