【问题标题】:Evaluating the constructor equivalent of a variable评估等效于变量的构造函数
【发布时间】:2020-08-15 08:46:08
【问题描述】:

我有构造函数

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++ 不能以这种方式工作。您必须为所有其他人写出一堆if 语句,例如if (value == "CHM111") then return CHM111; 等等。这是 C++ 工作的唯一方式,就像那样。否则,请使用std::map,以变量名作为键,然后简单地使用return values[value];,对所有这些变量。

标签: c++ c++11 constructor wxwidgets


【解决方案1】:

wxTextCtrlwxString 一起使用,而不是与数字一起使用。
但是从 wxString 中获取数字真的很容易:使用wxString::ToCLong。例如:

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

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

所以,如果用户输入3,'if' 为真,因为CMH111 被初始化为3

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


在 C++ 中不可能与变量的名称进行比较。

【讨论】:

  • 您的回复没有回答我的问题,但在很大程度上回答了我的问题。我能够使用 wxString 常量及其浮点值创建一个映射。当事件处理程序输入和评估 wxString 常量时,它们的值(即它们对应的浮点值)被提取并用于给出正确结果的数学方程。感谢您的提醒。现在一切正常
【解决方案2】:

@Alvindera97, 你的程序是否应该限制用户只输入那些常量?那么你有一个错误的工具来完成这项工作!

查看 wxComboBox/wxChoice。这样,用户将只能从列表中进行选择,而您无需将这些常量定义保留在类中。

希望这会有所帮助!

【讨论】:

  • 不幸的是,我不希望用户输入常量。用户需要输入课程代码(在一个 wxTextCtrl 框中)和获得的成绩(在另一个 wxTextCtrl 框中)。当单击“计算 GP”按钮时,将收集框的内容,检查课程代码及其学分负载的枚举,将课程代码映射到学分负载 (int),将成绩映射到成绩点 ( int) 并根据学分负荷和成绩点的值进行一些基本的数学计算后,返回最终值....
  • 在深入了解了我想要实现的目标之后,我决定尝试 C++ 映射,看看是否可以将课程代码映射到学分负载以及将等级映射到学分以使工作更轻松。不幸的是,这是一个使用 C++ 的学校项目。我有大量使用 python 的经验。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
  • 2016-07-04
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多