0
이 질문을하는 방법을 생각하는 데 시간이 걸렸습니다. 코드가 너무 커서 중요한 부분 만 사용하려고합니다.참조 객체에 의해 전달 된 변수에 참조 객체가 전달했습니다.
class full_object_detection
{
public:
full_object_detection(
const rectangle& rect_,
const std::vector<point>& parts_
) : rect(rect_), parts(parts_) {}
full_object_detection(){}
explicit full_object_detection(
const rectangle& rect_
) : rect(rect_) {}
const rectangle& get_rect() const { return rect; }
rectangle& get_rect() { return rect; }
unsigned long num_parts() const { return parts.size(); }
const point& part(unsigned long idx) const
{
// make sure requires clause is not broken
DLIB_ASSERT(idx < num_parts(),
"\t point full_object_detection::part()"
<< "\n\t Invalid inputs were given to this function "
<< "\n\t idx: " << idx
<< "\n\t num_parts(): " << num_parts()
<< "\n\t this: " << this
);
return parts[idx];
}
point& part(unsigned long idx) {
// make sure requires clause is not broken
DLIB_ASSERT(idx < num_parts(),
"\t point full_object_detection::part()"
<< "\n\t Invalid inputs were given to this function "
<< "\n\t idx: " << idx
<< "\n\t num_parts(): " << num_parts()
<< "\n\t this: " << this
);
return parts[idx];
}
friend void serialize (
const full_object_detection& item,
std::ostream& out
)
{
int version = 1;
serialize(version, out);
serialize(item.rect, out);
serialize(item.parts, out);
}
friend void deserialize (
full_object_detection& item,
std::istream& in
)
{
int version = 0;
deserialize(version, in);
if (version != 1)
throw serialization_error("Unexpected version encountered while deserializing dlib::full_object_detection.");
deserialize(item.rect, in);
deserialize(item.parts, in);
}
bool operator==(
const full_object_detection& rhs
) const
{
if (rect != rhs.rect)
return false;
if (parts.size() != rhs.parts.size())
return false;
for (size_t i = 0; i < parts.size(); ++i)
{
if (parts[i] != rhs.parts[i])
return false;
}
return true;
}
private:
rectangle rect;
std::vector<point> parts;
};
typedef vector<long,2> point;
const full_object_detection& d = dets[i]; //Passed by reference object
의 출력 :
cout << d.part(41) << endl; // (123,456)
cout << d.part(41).x << endl; // ERROR!
Error C3867 'dlib::vector<long,2>::x': non-standard syntax; use '&' to create a pointer to member
Error C2679 binary '<<': no operator found which takes a right-hand operand of type 'overloaded-function' (or there is no acceptable conversion)
귀하의 도움에 감사드립니다!
'part()'선언은 무엇입니까? 'rect'와'parts'는 무엇에 선언되어 있습니까? 'point'의 선언은 무엇입니까? – EyasSH
@EyasSH 전체 클래스 추가 –