早速本題に入らせて貰います
C
1int is_event_device(const struct dirent *dir) 2{ 3 return strncmp("event", dir->d_name, 5) == 0; 4}
C
1struct dirent **namelist; 2int i, ndev; 3 4ndev = scandir("/dev/input", &namelist, is_event_device, alphasort);
大分省いてソースを書きましたが
このようなC言語のソースがあり、コンパイルも通り
問題なく動作することが確認できました
これを元に既にあるC++のプログラムに組み込もうと思い
以下のように変更しました
C++
1int クラス名::is_event_device(const struct dirent *dir) 2{ 3 return strncmp("event", dir->d_name, 5) == 0; 4}
変更といいましても、使用したいクラス内に組み込んだだけなので
クラス関数(メソッド?)として追加しただけなのですが
これをコンパイルするとエラーになってしまいました。
エラーはint型をint ()(struct dirent)型に変換できないという内容でした
これをクラス外で宣言してソースの「クラス名::」の部分を消すだけで
コンパイルが通るようになりました。
出来ればこれをクラス関数として使いたいため解決法が分かる方居ましたら
教えていただけませんでしょうか?
出来ればこういうエラーになってしまう原因なども分かりましたら教えていただけると嬉しいです。
関数とクラス関数は似ているようで別物なのでしょうか
以上、よろしくお願いいたします
----------追記--------------
クラス宣言
C++
1//ファイル名:クラス名.h 2namespace 名前 3{ 4 5//---------------------------------------------------------------------------- 6// クラス宣言. 7//---------------------------------------------------------------------------- 8class クラス名 9{ 10//---------------------------------------------------------------------------- 11// 定数定義. 12//---------------------------------------------------------------------------- 13 14 15//---------------------------------------------------------------------------- 16// メンバ関数. 17//---------------------------------------------------------------------------- 18// 公開メンバ関数. 19public: 20 21 22// 非公開メンバ関数. 23private: 24 int is_event_device(const struct dirent *dir) 25 26//---------------------------------------------------------------------------- 27// メンバ変数. 28//---------------------------------------------------------------------------- 29// 非公開メンバ変数. 30private: 31 32}; 33 34} // namespace 名前
エラー文は
「cannot convert '名前::クラス名::is_event_device' from type 'int (名前::クラス名::)(const dirent*) to type 'int ()(const dirent)'」
です
エラーが出ているのは
ndev = scandir("/dev/input", &namelist, is_event_device, alphasort);
のところです
回答3件
あなたの回答
tips
プレビュー