知りたいことの概要
関数ポインタのように、関数の参照を定義できることを知りました。
その関数の参照の仕方について、不明な点があるので、それについてご教示いただきたいです。
環境
- OS: Windows10 64bit Home 2004
- コンパイラ:MinGW-W64 ver8.1.0
発生している問題
初めに、以下のようなコードで関数の参照を定義して実行したところ、動作させることができました。
cpp
1#include <bits/stdc++.h> 2using namespace std; 3 4int func(int a = 0, int b = 0) {return a - b;} 5 6int main(){ 7 int (&func_ref)(int, int) = func; // 関数funcの参照func_refを定義 8 cout << "Result of func : " << func(5, 1) << endl; 9 cout << "Result of func_ref: " << func_ref(5, 1) << endl; 10} 11// 実行結果 12// Result of func : 4 13// Result of func_ref: 4
しかし、同様のことをクラス内で実行しようと思い、下記のコードを記述したところ、エラーが発生しました。
cpp
1#include <bits/stdc++.h> 2using namespace std; 3 4class Test { 5private: 6 int func(int a = 0, int b = 0) {return a - b;} 7 8public: 9 void do_test(int a, int b) { 10 int (&func_ref)(int, int) = func; // 関数funcの参照func_refを定義 11 cout << "Result of func : " << func(a, b) << endl; 12 cout << "Result of func_ref: " << func_ref(a, b) << endl; 13 } 14}; 15 16int main(){ 17 Test obj; 18 obj.do_test(5, 1); 19}
console
1error: invalid initialization of non-const reference of type 'int (&)(int, int)' 2 from an rvalue of type '<unresolved overloaded function type>' 3 int (&func_ref)(int, int) = func; 4 ^~~~
最初の例と同様に、funcのみをクラスの外に出すと、問題なく実行できます。
質問内容
関数の参照を行う場合、参照したい関数はグローバル空間?に記述しなければならないのでしょうか。もしそうなら、なぜグローバル空間に記述するとOKなのでしょうか。
クラスの中で記述した関数を参照することはできないのでしょうか。
参考
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/25 08:49