что вы сообщаете, это определение класса, в определении как логика вам нужно указать тип (в данном случае класс) объекта, который вы хотите внутри класса. (EDIT + другой typedef)
public:
std_msgs::Header header; //declare header of type std_msgs::Header
std::string encoding;
cv::Mat image;
для удаления (сообщает программе, что ему нужно зарезервировать пространство памяти для объекта) объекта класса cv_bridge::CvImage
, вам необходимо сделать:
cv_bridge::CvImage this_is_an_object; //declaring an object of type CvImgage
РЕДАКТИРОВАТЬ: в вашем случае cv_bridge::CvImgPtr
- это shared_ptr
, поэтому указатель (typedef boost::shared_ptr<CvImage> CvImgPtr;
), поэтому его необходимо использовать как указатель.
(упрощенно: указатель - это переменная, содержащая адрес в памяти другой переменной или объекта, указатель - это переменная, указывающая на другую, используемая для уменьшения копирования памяти, например, при передаче объекта в функцию)
так: чтобы объявить объект, вы набираете имя класса (в этом случае EDIT имя указателя класса CvImgPtr
- это указатель для CvImage
) (имя полезно для компилятора, который с эта декларация знает, как зарезервирована память, в соответствии с определением класса CvImage
) cv_bridge::CvImgPtr
, за которым следует имя нужного вам объекта (который вызывается в данном случае this_is_an_object
).
похоже на написание основного объявления переменной (int j , double a, char f
)
делать cv_bridge::CvImgPtr.header.seq
не имеет смысла, так как вы смешиваете объявление переменной с вызовом имени объекта класса и даже указателя пополам.
для вызова объекта seq
вам нужно набрать this_is_an_object.header.seq
, например, если это структура.
struct foo{ //definition : teach the compiler how is made struct foo.
char bar;
};
foo aaa; //aaa is the name of the variable/object/instance of the struct
aaa.bar = "a"; //call the member bar of the struct and assign value "a"
std::cout<<aaa.bar; //print aaa.bar
похоже в вашем случае с классами:
class CvImage //definition
{
public:
std_msgs::Header header;
std::string encoding;
cv::Mat image;
};
cv_bridge::CvImage this_is_an_object; //declare the variable / object this_is_an_object of class cv_bridge::CvImage
std::cout<< this_is_an_object.header.seq; //access the value of seq from object header of object this_is_an_object,
//this_is_an_object is an object of class cv_bridge::CvImage
или
typedef boost::shared_ptr<CvImage> CvImgPtr;
cv_bridge::CvImgPtr this_is_a_pointer_to_object;
std::cout<< (*this_is_a_pointer_to_object).header.seq;
эквивалентно:
std::cout<< this_is_a_pointer_to_object -> header.seq;
оператор (*object).member
равен object->member