2012-07-25 41 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