评估变量的构造函数等效项

问题描述 投票:0回答:1

我有构造函数

class MyFrame : public wxFrame {  // defines the options on the top bar of the screen here we have:
    public:
        MyFrame();
    private:
        void OnHello(wxCommandEvent& event);  // hello option
        void OnExit(wxCommandEvent& event);  // exit option
        void OnAbout(wxCommandEvent& event);  // about option
        void OnHelp(wxCommandEvent& event); // event option

        // void OnCourseTextBoxClicked(wxCommandEvent &event);
        void OnOneHundredLevelDisplayGpButtonClicked(wxCommandEvent &event);
        void OnTwoHundredLevelDisplayGpButtonClicked(wxCommandEvent &event);
        void OnThreeHundredLevelDisplayGpButtonClicked(wxCommandEvent &event);
        void OnFourHundredLevelDisplayGpButtonClicked(wxCommandEvent &event);
        void OnFiveHundredLevelDisplayGpButtonClicked(wxCommandEvent &event);

        void OnDisplayCgpaButtonClicked(wxCommandEvent &event);

        // Common Courses equating their credit load
        /* 100 LEVEL FIRST SEMESTER */
        int CHM111 = 3;
        int CHM113 = 3;
        int MTH111 = 3;
        int MTH112 = 3;
        int PHY111 = 3;
        int PHY113 = 3;
        int GST111 = 2;
        int GST112 = 2;

        /* 100 LEVEL SECOND SEMESTER */
        int CHM122 = 3;
        int CHM124 = 3;
        int MTH123 = 3;
        int MTH125 = 3;
        int PHY109 = 2;
        int PHY124 = 4;
        int GST121 = 2;
        int GST122 = 2;
        int GST123 = 2;
        int LEVEL_TOTAL_100 = 47;
}

以及代码库中的其他位置,一些文本被输入到文本框中。该文本框应该包含在构造函数中定义的变量之一,这些变量求值为其各自的整数。

评估文本框的内容时,例如:

course_one_text_box->GetValue();

评估CHM111

我想获取CHM111的构造函数整数值,即3。我想在数学公式中使用此值。

我该如何做?是否有一种特定的语法代替了构造函数记录的变量版本?谢谢。

c++ c++11 constructor wxwidgets
1个回答
0
投票

您的构造函数对这些CHMxxx值有很大的问题:构造函数完成后,它们将被删除。

此问题很容易解决:只需将其声明移至MyFrame的声明块即可。因此,只要您在代码中的某个位置创建MyFrame的实例,它们就会存在。您仍然可以在代码中使用初始化(CMH111=3;)。我最好在ctor中使用'constexpr'。

对于文本框问题,wxTextCtrlwxString一起使用,而不与数字一起使用。但是从wxString获取数字确实很容易:使用wxString::ToCLong。例如:

long value;
if ( ! mystring.ToCLong(&value) )
    some message here, conversion failed (not a number)

//Your comparisons:
if ( value == (long)CHM111 )
   ....

因此,如果用户输入3,则'if'为true,因为CMH111初始化为3

请注意从(long)强制转换为int,以避免编译器警告。为什么不使用long而不是int作为CHMxxx类型?

© www.soinside.com 2019 - 2024. All rights reserved.