C 在定義動態記憶體管理類時allocator型別成員的定義問題?

時間 2021-05-31 13:49:34

1樓:

你在類裡只是宣告了乙個靜態成員,它是未定義的,使用乙個宣告了的但未定義的靜態成員變數,鏈結就會報錯,你需要在另乙個地方定義一下那個靜態成員變數。

class

String

注意區分變數的宣告(declaration)與定義(definition):「宣告」指明了變數的型別與名稱,「定義」除了指明了變數的型別與名稱之外,還為變數分配了記憶體以及初始值。對比一下,如果乙個函式你只宣告,卻沒有定義就呼叫它的話,也是同樣的錯誤。

變數的宣告與定義比較難以區分,但是函式的宣告與定義是很好區分的。回頭看看《C++ Primer 5th》的2.2.

2節吧。

再者要怎麼定義靜態成員變數,最重要的是保證靜態成員變數只被定義了一次,所以你不能在String.h裡定義,這樣的話它被多次include就有可能重複定義了,看看《C++ Primer 5th》的7.6節吧。

2樓:

未定義,但是因為靜態成員不消亡,在標頭檔案裡初始化會導致重複定義,即使你使用了#ifndef也不能解決問題,所以在標頭檔案裡宣告,然後標頭檔案外定義一下。

3樓:陳碩

std::allocator String::alloc;

你需要定義這個static alloc member,在String class之外,寫上一句。注意不要寫在header file裡。

C語言中動態記憶體分配的本質是什麼?

古斟布衣 靜態分配需要你預估記憶體使用量,如果預估使用量多於實際使用量,自然就是浪費 動態分配是本質上是通過malloc realloc等介面從作業系統的記憶體堆中申請一塊滿足當前使用量的記憶體,不虛了就通過free還給作業系統的記憶體堆,不夠了還可以realloc,相當於按需使用,自然就不會造成浪...

能求教STM32動態記憶體分配如何解決記憶體碎片問題嗎?

張浩 20k的f103c8或者cb之類就別用malloc了,自己花點功夫改成靜態的吧 64k的話還可以規劃一下,看看最差情況能用掉多少。以及試試用bget之類第三方庫代替malloc wdx04 嵌入式作業系統基本都有記憶體池吧,例如Mbed OS的MemoryPool Queue 檢測按鍵次數和每...

為什麼高管特別喜歡在領英髮動態?

張球 高管 部門負責人以上 的主要工作是政治和社交,萌新會對公司高管帶著崇拜的眼光,認為他們在專業業務上 如財會 IT 運營 是絕對無敵的,其實並不是這樣。管理者的工作是管理而不是具體事務。因此高管在某些平台發文,不管是領英還是B乎,都是拓展社交和影響力的需求驅動的。可以看看 組織行為學 你會更快的...