Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ToolBar: Fix calling virtual function from the constructor #281

Merged

Conversation

ma8ma
Copy link
Collaborator

@ma8ma ma8ma commented May 16, 2020

XXXToolBarはコンストラクタ内で仮想関数pack_buttons()を呼び出していますが、仮想関数はコントラクタ内で派生クラスの関数として呼び出しできないためcppcheckに警告されます。
そのためスコープ解決演算子を使ってクラスを明示します。

cppcheckのレポート
src/article/toolbarsearch.h:36:14: warning: Virtual function 'pack_buttons' is called from constructor 'SearchToolBar()' at line 36. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/article/toolbarsearch.cpp:36:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/article/toolbarsearch.h:36:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/article/toolbar.h:39:14: warning: Virtual function 'pack_buttons' is called from constructor 'ArticleToolBar()' at line 47. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/article/toolbar.cpp:47:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/article/toolbar.h:39:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/article/toolbarsimple.h:21:14: warning: Virtual function 'pack_buttons' is called from constructor 'ArticleToolBarSimple()' at line 23. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/article/toolbarsimple.cpp:23:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/article/toolbarsimple.h:21:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/bbslist/toolbar.h:38:14: warning: Virtual function 'pack_buttons' is called from constructor 'BBSListToolBar()' at line 59. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/bbslist/toolbar.cpp:59:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/bbslist/toolbar.h:38:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/bbslist/toolbar.h:64:14: warning: Virtual function 'pack_buttons' is called from constructor 'EditListToolBar()' at line 235. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/bbslist/toolbar.cpp:235:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/bbslist/toolbar.h:64:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/board/toolbar.h:26:14: warning: Virtual function 'pack_buttons' is called from constructor 'BoardToolBar()' at line 22. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/board/toolbar.cpp:22:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/board/toolbar.h:26:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/maintoolbar.h:48:14: warning: Virtual function 'pack_buttons' is called from constructor 'MainToolBar()' at line 65. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/maintoolbar.cpp:65:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/maintoolbar.h:48:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/message/toolbar.h:64:14: warning: Virtual function 'pack_buttons' is called from constructor 'MessageToolBar()' at line 82. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/message/toolbar.cpp:82:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/message/toolbar.h:64:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/message/toolbar.h:84:14: warning: Virtual function 'pack_buttons' is called from constructor 'MessageToolBarPreview()' at line 242. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/message/toolbar.cpp:242:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/message/toolbar.h:84:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^

XXXToolBarはコンストラクタ内で仮想関数pack_buttons()を呼び出していますが
仮想関数はコントラクタ内で派生クラスの関数として呼び出しできないため
cppcheckに警告されます。そのためスコープ解決演算子を使ってクラスを
明示します。

cppcheckのレポート
```
src/article/toolbarsearch.h:36:14: warning: Virtual function 'pack_buttons' is called from constructor 'SearchToolBar()' at line 36. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/article/toolbarsearch.cpp:36:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/article/toolbarsearch.h:36:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/article/toolbar.h:39:14: warning: Virtual function 'pack_buttons' is called from constructor 'ArticleToolBar()' at line 47. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/article/toolbar.cpp:47:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/article/toolbar.h:39:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/article/toolbarsimple.h:21:14: warning: Virtual function 'pack_buttons' is called from constructor 'ArticleToolBarSimple()' at line 23. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/article/toolbarsimple.cpp:23:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/article/toolbarsimple.h:21:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/bbslist/toolbar.h:38:14: warning: Virtual function 'pack_buttons' is called from constructor 'BBSListToolBar()' at line 59. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/bbslist/toolbar.cpp:59:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/bbslist/toolbar.h:38:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/bbslist/toolbar.h:64:14: warning: Virtual function 'pack_buttons' is called from constructor 'EditListToolBar()' at line 235. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/bbslist/toolbar.cpp:235:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/bbslist/toolbar.h:64:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/board/toolbar.h:26:14: warning: Virtual function 'pack_buttons' is called from constructor 'BoardToolBar()' at line 22. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/board/toolbar.cpp:22:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/board/toolbar.h:26:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/maintoolbar.h:48:14: warning: Virtual function 'pack_buttons' is called from constructor 'MainToolBar()' at line 65. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/maintoolbar.cpp:65:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/maintoolbar.h:48:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/message/toolbar.h:64:14: warning: Virtual function 'pack_buttons' is called from constructor 'MessageToolBar()' at line 82. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/message/toolbar.cpp:82:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/message/toolbar.h:64:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
src/message/toolbar.h:84:14: warning: Virtual function 'pack_buttons' is called from constructor 'MessageToolBarPreview()' at line 242. Dynamic binding is not used. [virtualCallInConstructor]
        void pack_buttons() override;
             ^
src/message/toolbar.cpp:242:5: note: Calling pack_buttons
    pack_buttons();
    ^
src/message/toolbar.h:84:14: note: pack_buttons is a virtual function
        void pack_buttons() override;
             ^
```
@ma8ma ma8ma added the bug バグの追跡 label May 16, 2020
@ma8ma ma8ma merged commit 956878b into JDimproved:master May 16, 2020
@ma8ma ma8ma added this to Done in State of JDim-v0.3.0+ via automation May 16, 2020
@ma8ma ma8ma deleted the toolbar-fix-calling-virtual-function-from-ctor branch May 16, 2020 06:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug バグの追跡
Projects
No open projects
Development

Successfully merging this pull request may close these issues.

None yet

1 participant