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'在?什麼是「點」的聲明? – EyasSH
@EyasSH添加完整課程 –