[英]Avoiding conflicting declaration errors in typedef c++
有沒有辦法讓g ++忽略或解決沖突的typedef?
背景:
我正在為gridlab_d模擬器編寫一些c ++代碼。 我的模型需要連接到c ++數據庫,所以我使用的是mysql ++庫。 使用mysql ++庫需要我鏈接到mysql庫,所以我編譯
g++ -I/usr/include/mysql -I/usr/local/include/mysql++
問題:
gridlab中的mysql.h和list.h都是一個具有名稱LIST的結構。 這是編譯器錯誤
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'
謝謝你的幫助!
也許預處理器包含您的問題的解決方案。
#define LIST GRIDLAB_LIST
#include <gridlab_include_file.h>
#undef LIST
當然,這依賴於gridlab而不是#include
任何來自MySQL的東西。
最佳方案:
1)保留當前的主程序
EXAMPLE: "main.cpp"
2)為數據庫訪問編寫一個新模塊
EXAMPLE: dbaccess.cpp, dbaccess.h
3)#include“main.cpp中的”dbaccess.h“
您的dbaccess代碼中不需要對gridlab的任何引用; 您不需要在dbaccess。*代碼之外引用mySql或mySQL列表。
問題解決了 :)?
PS:如果你真的需要某種可以在不同模塊之間共享的“列表”,我建議你使用像標准C ++“vector <>”這樣的東西。 恕我直言...
我假設你在多個文件中使用SSQLS。 您是否已閱讀有關在多個文件中使用SSQLS的說明。
http://tangentsoft.net/mysql++/doc/html/userman/ssqls.html#ssqls-in-header
有兩種可能性 - 兩種列表類型兼容,或者它們不兼容。 如果它們兼容,您只需將定義復制到新標題中,並在每個位置包含該標題。 如果它們不兼容,您將不得不更改其中一個名稱。
編輯:以下是我通過Google搜索找到的兩個結構定義:
MySQL的:
typedef struct st_list {
struct st_list *prev,*next;
void *data;
} LIST;
Gridlab:
typedef struct s_listitem {
void *data;
struct s_listitem *prev;
struct s_listitem *next;
} LISTITEM;
typedef struct s_list {
unsigned int size;
LISTITEM *first;
LISTITEM *last;
} LIST;
看着那些,似乎你不打算將它們按到同一類型。 更改其中一個名稱 - 通過大搜索/替換或使用一些聰明的#define
技巧 - 注意如果選擇后一個路線,你不會犯任何錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.