ROSOnWindows icon indicating copy to clipboard operation
ROSOnWindows copied to clipboard

[Melodic][Noetic] update_functions.h(188): error C2589: 'constant': illegal token on right side of '::'

Open seanyen opened this issue 5 years ago • 0 comments

When you are compiling components using the diagnostic_updater, you might see this type of compile errors:

C:\opt\ros\noetic\x64\include\diagnostic_updater/update_functions.h(188): error C2589: 'constant': illegal token on right side of '::'
C:\opt\ros\noetic\x64\include\diagnostic_updater/update_functions.h(188): error C2144: syntax error: 'unknown-type' should be preceded by ')'
C:\opt\ros\noetic\x64\include\diagnostic_updater/update_functions.h(188): error C2661: 'diagnostic_updater::DiagnosticStatusWrapper::summary': no overloaded function takes 0 arguments
C:\opt\ros\noetic\x64\include\diagnostic_updater/update_functions.h(188): error C2144: syntax error: 'unknown-type' should be preceded by ';'
C:\opt\ros\noetic\x64\include\diagnostic_updater/update_functions.h(188): error C2059: syntax error: ','
C:\opt\ros\noetic\x64\include\diagnostic_updater/update_functions.h(188): error C2059: syntax error: ')'

It could be related that Windows.h was included after diagnostic_msgs/DiagnosticStatus.h in the inclusion order, and in such case, the ERROR macro will shadow the DiagnosticStatus::ERROR symbol and cause compile problems.

One workaround is to use the following inclusion order in your cpp file:

#include <diagnostic_updater/publisher.h>
#include <diagnostic_updater/diagnostic_updater.h>

NOTE: Here is a /showIncludes logs to show a situation that Windows.h was included after DiagnosticStatus.h:

Note: including file:  C:\opt\ros\melodic\x64\include\diagnostic_updater/diagnostic_updater.h
Note: including file:   C:\opt\ros\melodic\x64\include\diagnostic_msgs/DiagnosticArray.h
Note: including file:    C:\opt\ros\melodic\x64\include\diagnostic_msgs/DiagnosticStatus.h
Note: including file:     C:\opt\ros\melodic\x64\include\diagnostic_msgs/KeyValue.h
Note: including file:   C:\opt\ros\melodic\x64\include\diagnostic_updater/DiagnosticStatusWrapper.h
Note: including file:   C:\opt\ros\melodic\x64\include\boost-1_66\boost/thread.hpp
Note: including file:  C:\opt\ros\melodic\x64\include\diagnostic_updater/publisher.h
Note: including file:   C:\opt\ros\melodic\x64\include\ros/subscription.h
Note: including file:    C:\opt\ros\melodic\x64\include\ros/header.h
Note: including file:     C:\opt\ros\melodic\x64\include\ros\cpp_common_decl.h
Note: including file:    C:\opt\ros\melodic\x64\include\ros/xmlrpc_manager.h
Note: including file:     C:\opt\ros\melodic\x64\include\boost-1_66\boost/function.hpp
Note: including file:     C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpc.h
Note: including file:      C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpcClient.h
Note: including file:       C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpcDispatch.h
Note: including file:       C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpcSource.h
Note: including file:      C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpcException.h
Note: including file:      C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpcServer.h
Note: including file:      C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpcServerMethod.h
Note: including file:      C:\opt\ros\melodic\x64\include\xmlrpcpp/XmlRpcUtil.h
Note: including file:    C:\opt\ros\melodic\x64\include\ros/statistics.h
Note: including file:     C:\opt\ros\melodic\x64\include\ros\poll_set.h
Note: including file:      C:\opt\ros\melodic\x64\include\ros\io.h
Note: including file:       C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um\winsock2.h
Note: including file:        C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\um\windows.h

seanyen avatar Sep 25 '20 23:09 seanyen