根據實習公司專案的需要,我對一小部分**進行了重構,本來以為不算什麼,但在今天的除錯過程中一路遇上了很多坑,且把這些記下來,錄了乙個**的簡單模型:
ban.h
#include "iostream"
#include "vector"
#include "stdlib.h"
#include "map"
using namespace std;
class ban;
ban.cpp
#include "iostream"
#include "ban.h"
using namespace std;
void ban::print1(int i)
void ban::print2(int i)
void ban::print3(int i)
ban::ban();
mp[1] = help;
}void ban::pushban()
}main.cpp //沒有用處,略過
整個**是把乙個類裡面成員函式放入乙個vector裡面,從而通過乙個函式(pushban)就可以進行一整串的遍歷操作。
第一坑:typedef void(ban::*fun)(int i); 這段**表示定義乙個函式指標fun作為一串函式的別名,目的是為放入vector中,踩中的坑在於ban::是否要加,如果ban::不加,在map操作上會有很多難以理解的錯誤,至於為什麼,不知道·······;
第二坑:vectorhelp=還是vectorhelp=的問題,因為在頭上定義的時候用到了ban::,因此不得不加上ban::,即時這就是在ban類裡面;
第三坑:pushban這個函式使用上,按照原來的想法,我本來用了(*it)(5)這樣的模型,如果不是類成員函式,而是比如單一cpp檔案裡的函式,這樣是沒有問題的,然而,在類成員呼叫中必須要用(this->*(*it))(5)這樣奇怪的形式,在cpp中 ->*以及.*都用來呼叫成員函式或者變數,要this這樣呼叫的原因,我想也是第一條裡面加入ban::導致的,就是至始至終,fun的呼叫都不能撇開ban類!
因為這個問題,搞了好長時間,也算在cpp的大路上又掃了乙個盲吧。
關於NULL指標的乙個有意思的現象
首先看一段 include stdio.h class ctest ctest void fun int main int argc,char argv 這段 按照最初的想法大部分稍微知道怎麼使用指標的都會認為會出現執行時刻錯誤,因為指標為null。可是無論是在gcc下還是用vc都能夠合法的輸出 i...
乙個有意思的問題
a b這個表示式如何理解?應該理解成a b還是a b,還是a b呢?應該按第一種方式理解。編譯的過程分為詞法解析和 語法解析兩個階段,在詞法解析階段,編譯器總是從前到後找最長的合法token。把這個表 達式從前到後解析,變數名a是乙個token,a後 面有兩個以上的 號,在c語言中乙個 號是合法的t...
乙個有意思的問題
最近做乙個交通管理系統,其中有個使用者投票功能。設想是直接開發乙個自定義的控制項。完成顯示,投票,ip檢索等全部功能。然而卻遇到乙個有意思的問題。具體來說就說,因為是用radiobuttonlist顯示的資料,在用radiobuttonlist.value捕獲使用者輸入時卻發現取出的索引始終為0.即...