0

私はPoint Cloud Libraryで働いていると私は、次の動作の繰り返しを避けるためにしようとしている:具体的なクラスを指すために抽象型のC++ポインタを使用するにはどうすればよいですか?

pcl::PointCloud<pcl::PointXYZRGB>::Ptr filter(PointCloud<pcl::PointXYZRGB>::Ptr input_cloud) { 
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>); 
    subclass.setInputCloud(input_cloud); 
    subclass.filter(*cloud_filtered); 
    return cloud_filtered; 
} 

私はこのexampleに基づくものを使用することを望んだとの線に沿って:

pcl::Filter<PointXYZRGB>* f; 
pcl::Subclass<PointXYZRGB> s; //where s is an implementation of f 
f = &s; 

pcl::PointCloud<pcl::PointXYZRGB>::Ptr filter(PointCloud<pcl::PointXYZRGB>::Ptr input_cloud) { 
    pcl::PointCloud<pcl::PointXYZRGB>::Ptr cloud_filtered(new pcl::PointCloud<pcl::PointXYZRGB>); 
    f->setInputCloud(input_cloud); 
    f->filter(*cloud_filtered); 
    return cloud_filtered; 
} 

しかし、これはコンパイラによって報告されたようにf does not name a typeとしてコンパイルされません。

pcl::Filterが抽象クラスであるとしますか?

このアプローチは、pcl::VoxelGridなどのサンプルクラスに対して有効ですか、それとも代替手段がありますか?

ご協力いただきありがとうございます。

+0

http://stackoverflow.com/questions/8584431/why-is-the-keyword-typename-([typename' '行方不明]必要とされる前に必要とされる名前に依存しない名前b) – dhke

+0

関数の外で 'f =&s; 'を実行しようとしていますか? – aschepler

+0

通常、コンパイラがクラスを見つけることができないときにこのエラーが出ます。fを抽象クラスとして持っているのは私にとっては非常に普通です。問題はインクルードにあると思います。正しい場所? –

答えて

0

行番号f = &s;は、関数内に移動する必要があります。

この場合、派生したサブクラスのコンストラクタ内に移動されました。私は臭い

クレジットやユーザーへの答えのためのおかげで、aschepler

関連する問題