Avoiding conflicting declaration errors in typedef c++

Vikas Yendluri picture Vikas Yendluri · Jan 14, 2012 · Viewed 13.9k times · Source

Is there a way I can make g++ ignore or work around conflicting typedefs?

Background:

I'm writing some c++ code for the gridlab_d simulator. My model needs to connect to a c++ database, so I'm using the mysql++ library. use of the mysql++ library requires me to link to the mysql library, so i compile with

g++ -I/usr/include/mysql -I/usr/local/include/mysql++

Problem:

both mysql.h and list.h in gridlab typedef a struct to have the name LIST . Here is the compiler error

In file included from /usr/include/mysql/mysql.h:76, 
             from /usr/include/mysql++/common.h:182,
             from /usr/include/mysql++/connection.h:38,
             from /usr/include/mysql++/mysql++.h:56,
             from direct_data.cpp:21:
/usr/include/mysql/my_list.h: At global scope:
/usr/include/mysql/my_list.h:26: error: conflicting declaration 'typedef struct st_list LIST'
../core/list.h:22: error: 'LIST' has a previous declaration as 'typedef struct s_list LIST'

Thanks for your help!

Answer

Omnifarious picture Omnifarious · Jan 14, 2012

Perhaps the preprocessor contains a solution to your problem.

#define LIST GRIDLAB_LIST
#include <gridlab_include_file.h>
#undef LIST

This relies, of course, on gridlab not #includeing anything from MySQL.