case語句跳過變數初始化的問題

2021-06-06 18:02:42 字數 1737 閱讀 3018

天寫程式遇到了乙個問題,錯誤如下:

**如下:

switch(m_radio_contour)

;//建立開啟影象的副本,並開閉空間用來儲存處理後的結果

pimage=cvcloneimage(img);

pimg8u=cvcreateimage(cvgetsize(img),ipl_depth_8u,1);

pimg8usmooth=cvcreateimage(cvgetsize(img),ipl_depth_8u,1);

//rgb到gray的影象轉換

cvcvtcolor(pimage,pimg8u,cv_rgb2gray);

//影象的高斯濾波

cvsmooth(pimg8u,pimg8usmooth,cv_gaussian,3,0,0);

//建立位深為16位的新影象區域,因為sobel運算元要求影象的位深為16位、

pimgsobelgray=cvcreateimage(cvgetsize(pimage),ipl_depth_16s,1);

//計算一階x方向的影象差分

cvsobel(pimg8usmooth,pimgsobelgray,0,1,3);

cvconvertscaleabs(pimgsobelgray,pimg8u,1,0);

cvvnamedwindow("sobel gray image",1);

cvvshowimage("sobel gray image",pimg8u);

………………………………

看了一下網頁,是說這個case 語句可能沒有被執行到(執行其他case了)導致變數沒有初始化而導致接下來的錯誤,所以需要把變數放到switch前面宣告初始化,可是我又不想把初始化放在switch前面,還有乙個解決方法,在swith中定義內部變數加括號,就可以了。

switch(m_radio_contour)

;//建立開啟影象的副本,並開閉空間用來儲存處理後的結果

pimage=cvcloneimage(img);

pimg8u=cvcreateimage(cvgetsize(img),ipl_depth_8u,1);

pimg8usmooth=cvcreateimage(cvgetsize(img),ipl_depth_8u,1);

//rgb到gray的影象轉換

cvcvtcolor(pimage,pimg8u,cv_rgb2gray);

//影象的高斯濾波

cvsmooth(pimg8u,pimg8usmooth,cv_gaussian,3,0,0);

//建立位深為16位的新影象區域,因為sobel運算元要求影象的位深為16位、

pimgsobelgray=cvcreateimage(cvgetsize(pimage),ipl_depth_16s,1);

//計算一階x方向的影象差分

cvsobel(pimg8usmooth,pimgsobelgray,0,1,3);

cvconvertscaleabs(pimgsobelgray,pimg8u,1,0);

cvvnamedwindow("sobel gray image",1);

cvvshowimage("sobel gray image",pimg8u);

………………………………}

case 1:

至此,問題解決了。

變數初始化

int a 是變數定義,也就是說編譯器將為a分配儲存,這在編譯時被處理。int a 0 是定義 初始化,定義的分配儲存的action在編譯時完成,初始化的action則在執行時完成 將執行類似dword ptr ebp 4 0的指令,而單獨的int a 不會有對應的執行指令 定義是分配空間,而初始化...

變數的初始化

變數可以分為兩種,一種是方法內的區域性變數,另一種是類的成員變數 對於區域性變數,編譯器強制只有在初始化其值得時候才能使用,而成員變數會進行預設初始化。一 區域性變數必須先初始化後使用 public class test 二 成員變數的初始化 所有的成員變數 包括基本型別和類引用 其自動初始化是在剛...

變數的初始化

1.關於基本資料型別和引用資料型別初始化的值 package com.dbzhang.demo2 public class watersource public string tostring package com.dbzhang.demo2 public class sprinklersyste...