2012-07-25 29 views
0

我想比較wxstrings來確定我的程序會做什麼。我正在比較的字符串基於我正在閱讀的文件,並且是文件中的唯一行。C++ wxwidgets比較wxstrings

我使用wxSmith激活的代碼塊。

這是我嘗試工作的程序部分。

void Disc_MasterFrame::OncdiscClick(wxCommandEvent& event) 
{ 
    system("sh detect-disc.sh"); 

    wxString file; 
    file << wxT("detect-disc"); 
    wxTextFile tfile; 
    tfile.Open(file); 
    detectdiscw=tfile.GetFirstLine(); 

    //std::ifstream myfile ("detect-disc"); 
    //getline (myfile,detectdisc); 
    //myfile.close(); 

    cd << wxT("An audio cd was inserted."); 
    dvd << wxT("A dvd was inserted."); 

    if (detectdiscw == cd){ 
     //musicrip->Show(); 
     //this->Disc_MasterFrame::ripmusic(); 
     void ripmusic(); 
    } 
    else if (detectdiscw == dvd) 
    { 
     manipdvd->Show(); 
     void dvdmanip(); 
    } 
} 

void Disc_MasterFrame::ripmusic() 
{ 
    musicrip->Show(); 
    system("sh disc-info.sh"); 
    ... 

當點擊該按鈕時,腳本應該運行,但它確實,因爲它產生使用cdde命令(LINUX/Ubuntu的CLI程序)的文件。 此命令的結果是「插入了音頻CD」。所以我在測試時保持一致。

然後打開並讀取文件並嘗試將其與兩個預定義的字符串進行比較。 一旦完成,它應該'顯示'已經創建的兩個面板之一。

我很確定我做錯了什麼,因爲它只是在按鈕被點擊後坐在那裏。

任何幫助或方向將不勝感激,謝謝。

+0

這似乎是一個令人沮喪的問題。您是否使用調試器完成了代碼?這通常會告訴你確切的代碼出錯的地方,甚至可以使修復變得明顯。嘗試一下,讓我們知道問題出在哪裏。 – ravenspoint 2012-07-25 20:08:09

+1

爲什麼你在調用'ripmusic'和'dvdmanip'之前有'void'?如果你忽略了返回值,你應該使用'(void)'來施放返回值(注意parens)。 – 2012-07-25 20:09:58

+0

嘗試在最後的'else'子句中添加* print *語句。如果您將'if' -'then'階梯轉換爲'switch'語句,您可以更好地看到問題。換句話說,如果'detectdiscw'的值不是cd或dvd,而是其他的東西,會發生什麼? – 2012-07-25 20:12:48

回答

0

在一個wxString中,< <正在將一個字符串附加到現有值(類似於+會做的事情,但是如果需要,可以使用方便的類型轉換)。我不確定這是你真正想要做什麼。如果你想分配一個新的價值,你的字符串,那麼你應該更換< <與=

0

問題在於你的線條

void ripmusic(); 

void dvdmanip(); 

內您打算調用這些函數,但這些函數聲明,而不是函數調用。換句話說,他們什麼都不做。從不調用你的函數ripmusicdvdmanip