看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《liu2007 (薯)》之銘言: : 我在define.h 檔案中定義了自己的 兩個struct : 編譯之後的錯誤訊息 : error C2011: 'node' : 'struct' type redefinition : error C2011: 'Pnode' : 'struct' type redefinition : 我應該是沒有重複定義啊..... : 第二個問題是: : 可是我在class的.cpp檔裡面打 class_name:: : 出現的表單卻沒有建構子的這個item : 一開始我以為是跟回傳值有關 : 但解構子卻有有在表單裡面 這兩個問題,都是忘記在 .h 加入 #ifndef 和 #endif 的原因。 讓編譯器重複讀取 define.h 和不知道 .h 已經結尾。 其實編譯器幫你載入了兩次 define.h,只是你沒有發現。 第一次是在 include.h, 而第二次是在引入 adrsQueue.h 又載入一次 define.h 正確的解法是 : 告訴編譯器說只要載入一次 define.h #ifndef __TEST_H__ // __TEST_H__ 由 progrmmer 自己取名 #define __TEST_H__ //----------------------------------------------------------------- struct node { char data; struct node *left_child, *right_child; }; typedef node dataNode; //----------------------------------------------------------------- struct Pnode { dataNode *point; struct Pnode *next; }; typedef Pnode adrsNode; //----------------------------------------------------------------- #endif -- ※ 發信站: 批踢踢實業坊(ptt.cc) ※ 編輯: msc0953 來自: 219.87.141.226 (12/27 17:00)
liu2007:真的耶,而且如果把include.h 的#include "define.h" 12/27 17:07
liu2007:// 掉 他反而會說沒有定義,感謝原PO解答 12/27 17:07
liu2007:之前看到#ifndef #endif 都不知道幹麻,原來是這個功用^^ 12/27 17:08