看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 問題(Question): 想以class實作一個stack功能 除了基本的push, pop和取值之外 使用動態記憶體配置stack,加上了動態調整stack大小的功能 (push後資料量到達stack容量上限,則將容量*2) (pop後資料量剩下stack容量上限的一半,則將容量/2) code如下: main.cpp http://codepad.org/KS4171zs stack.cpp http://codepad.org/c7F7AfHQ stack.h http://codepad.org/gZiF7t0L 想請問 1. stack.h中的line 47,為何要用int *&iContainer? 2. 一樣是stack.h中的line 47 ChangeCapacity這支function裡,是先把舊空間的資料移到新空間,再把舊空間刪掉, 然後指到新空間。請問有更快速或簡潔的方法嗎?(例如可以省掉搬資料的動作) 3. stack.h中,class member function的定義前面沒有加inline則會出現 multiple definition的錯誤。 雖然main.cpp和stack.cpp都有#include "stack.h", 想請問已經有加上 #ifndef _STACK_H_ #define _STACK_H_ 這樣不是應該要能避掉multiple definition的錯誤了嗎?是我哪裡弄錯了嗎? @_@ 麻煩大家幫忙解惑一下 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.176.221.68
azureblaze:1. 等同intptr &,他要把新空間的位址寫回iContainer 12/19 01:27
azureblaze:2.realloc()自動搬,或是用linkedList之類實做容器 12/19 01:29
azureblaze:3.include guard只能確保每個header只會被每個source 12/19 01:29
azureblaze:include一次,非inline函數的定義只能出現在一個source 12/19 01:31
wuliou:用linked list搬資料超快 12/19 10:02
wuliou:切開重新接然後多的free掉 12/19 10:03
Hyozero:謝謝 12/19 20:47
Hyozero:3.如果程式碼很長就不適合用inline了,那還有什麼辦法嗎? 12/19 20:48
Hyozero: 但為什麼加了inline就能避掉這個error呢? 12/19 20:48
shadow0326:member func定義寫到.cpp檔啊 12/19 22:25
azureblaze:加inline向編譯器保證不管看到他們幾次內容一定都一樣 12/19 22:32
QQ29:請問 我在VC下 不同cpp寫同樣名稱的class 也沒有問題耶@@ 12/20 16:52
QQ29:這該怎麼解釋呢? 12/20 16:52
danny8376:名稱相同對應位址並不同 除非你宣告extern才會找其他cpp 12/20 20:17
Hyozero:感謝各位 12/20 21:21