今天在寫乙個c++程式的時候,要用到stl的set容器,而且我想讓它利用自定義的排序準則來實現自動排序。而且set中元素型別是指向自定義的結構體的指標。結果執行總是出錯。
下面先貼出起初的**:
#include #include using namespace std;
typedef struct test_ttest;
class personalcriterion
};int main()
結果在vs2008中編譯執行出錯,錯誤資訊如下:
顯然問題出在這個自定義的仿函式排序準則這裡。那麼究竟是什麼問題呢?錯誤資訊顯示這裡丟失了限定符,即const。但是我這裡引數上明明有const呀,疑惑!
再次仔細看輸出的錯誤資訊,不能將引數一從型別1轉化到型別2.這兩個型別有什麼區別呢?答案是const的位置不同:指標常量和常量指標的區別!在有指標的地方,const放在不同的位置會導致完全不同的結果。前一種型別中,const是來修飾指標本身的,即指標常量,它指向的物件確定了之後就不能修改了,即不能修改使得它指向另外乙個物件。而第二種型別,const是來修飾指標所指向的型別的,即常量指標,指標本身不是const的,可以修改指向別的物件。但是指標所指向的位址處的內容卻不能修改,它是const的。
接下來就可以對**進行修改了。為了避免出現上述的問題,我們用typedef重新定義了指向自定義結構體的指標型別:
這樣就不會出現原來的問題了。修改正確的**如下:
#include #include using namespace std;
typedef struct test_ttest;
typedef test* test_ptr;
class personalcriterion
};int main()
return 0;
}
執行結果:
C 由指標常量和常量指標引發的問題
今天在寫乙個c 程式的時候,要用到stl的set容器,而且我想讓它利用自定義的排序準則來實現自動排序。而且set中元素型別是指向自定義的結構體的指標。結果執行總是出錯。下面先貼出起初的 include include using namespace std typedef struct test t...
C 指標常量 常量指標和常指標常量
1 指標常量 如果在定義指標變數時候,指標變數前用const修飾,被定義的指標變數就變成了乙個指標型別的常變數,指標型別的常變數簡稱為指標常量。格式如下 資料型別 const 指標變數 變數名 修飾符const與指標變數緊鄰,說明指標變數不允許修改,既然指標變數的值不能修改,所以一定要在定義的時候給...
c 指標常量 和 常量指標
指標常量 指向常量的位址,不允許改變指向位址,指向位置的變數值能被改變 p不可以變 const p 常量指標 指向常量的指標,指標指向的物件不能通過這個指標來修改,可是仍然可以通過原來的宣告修改,也就是說量指標可以被 賦值為變數的位址,之所以叫做常量指標,是限制了通過這個指標修改變數的值 cont ...