比如函式為
struct ******;
void get******(****** *s);
這種c中的方式在ice slice語言中是不能實現的
因為ice slice語言函式不接受結構體指標
所以可以吧******定義為類
class ****** ;
即便是這樣也不能直接定義void get******(****** *s);來傳遞乙個類指標
因為ice會把這個slice函式重新定義(用slice2cpp工具)為void get******(******prx&);
這裡面printerprx&並不是真正的類指標,而是乙個**,它無法訪問類中的成員
所以正確的做法應該是用引用方式傳遞乙個類
void get******(out ****** s);,
這樣ice會把這個函式重定義(slice2cpp)為
void get******(******ptr& s);
注意乙個是******prx,乙個是******ptr
******ptr這個類就可以通過******ptr->message,直接訪問類成員變數了
s也可以通過new ******,直接定義。******prx是沒法直接new的
還有乙個問題就是客戶端訪問void get******(******
ptr&
s);這個函式的時候,
不需要提前new出這個類
直接******ptr s;
get******(s);
就可以了
乙個結構體傳遞方式的問題
結構體做函式引數有兩種傳遞方式 一是傳遞結構體變數,這是值傳遞 二是傳遞結構體指標,這是位址傳遞。struct key number struct key number keynum 前幾天犯了乙個失誤,在傳遞結構體變數時使用值傳遞,由於在函式中修改的是區域性變數,導致函式外的全域性變數沒被修改到。...
結構體申請記憶體錯誤 傳遞了乙個指標的拷貝
今天在寫lua指令碼的申請函式時出現了乙個低階錯誤,在乙個函式中申請new,但是傳遞進去的是乙個指標,如下init1 函式 這樣寫其實是錯誤的 正確地寫法應該是init 或者可以修改init1返回申請的值。我一直以為我這樣是傳的指標,但是其實我這樣的寫法是傳的值。include using name...
結構體和結構體指標作為引數傳遞
結構體作為引數傳遞 include includeusing namespace std 宣告結構體 struct namect 函式宣告必須提供資料型別,但是可以不傳引數 struct namect getinfo void 宣告函式的返回值是乙個結構體,引數型別也是結構體,這裡結構體作為引數值直...