Вот пример, вы не можете установить uri для объекта параметров как такового, либо вы используете строку URI / объект URI, либо используете объект параметров для этого типа запроса (см. Node.js http.request документы )
const https = require('https');
const options = {
hostname: 'jsonplaceholder.typicode.com',
path: '/todos/1',
};
const req = https.request(options, (res) => {
let returnData = "";
res.on('data', chunk => {
returnData = returnData + chunk;
});
res.on('end', () => {
console.log('returndata: ', returnData);
});
});
req.on('error', (e) => {
console.error(e);
});
req.end();
Простой:
Чтобы это работало как Вы, хотят, необходимо сравнить Форму, не Форму*
Как указано в других ответах, повышении:: ptr_vector является простым способом достигнуть этого.
Это - серьезное основание использовать повышение:: ptr_vector.
Это не только обрабатывает то, что Ваши объекты должны быть уничтожены.
xtofl@: Вы забыли виртуальный деструктор.
Но это также заставляет участников быть похожими на объекты путем возврата ссылок, а не указателей. Это позволяет Вам использовать стандартные алгоритмы намного более естественно вместо того, чтобы играть вокруг с указателями в Вашей 'равной' функции (который является очень ООН C++ как).
#include <boost/ptr_container/ptr_vector.hpp>
#include <iostream>
class Shape
{
public:
~Shape() {}
bool operator==(Shape const& rhs) const
{
if (typeid(*this) != typeid(rhs))
{
return false;
}
return this->isEqual(rhs);
}
private:
virtual bool isEqual(Shape const& rhs) const = 0;
};
class Circle: public Shape
{
public:
Circle(int r)
:radius(r)
{}
private:
virtual bool isEqual(Shape const& r) const
{
Circle const& rhs = dynamic_cast<Circle const&>(r);
return radius == rhs.radius;
}
int radius;
};
class Rectangle: public Shape
{
public:
Rectangle(int h,int w)
:height(h)
,width(w)
{}
private:
virtual bool isEqual(Shape const& r) const
{
Rectangle const& rhs = dynamic_cast<Rectangle const&>(r);
return (height == rhs.height) && (width == rhs.width);
}
int height;
int width;
};
int main()
{
boost::ptr_vector<Shape> data;
data.push_back(new Circle(5));
data.push_back(new Circle(6));
data.push_back(new Rectangle(7,4));
boost::ptr_vector<Shape>::iterator f;
f = find(data.begin(),data.end(),Circle(6));
std::cout << "Find(" << (f - data.begin() ) << ")" << std::endl;
}
Как @David Pierre предлагает: находка основана на значении: это смотрит в диапазоне итераторов для указателя (например, 0x0F234420), который равняется указателю на new Circle(point(1,2),3)
Вы просто создали. Так как это - новый объект, это не будет там.
Можно обойти это при помощи find_if
с оператором, который сравнивает объекты, на которые ссылается с указатель.
Однако Критериум должен смочь дифференцироваться между типами формы.
class Shape {
public:
//amongst other functions
virtual bool equal( const Shape* ) const = 0;
};
class Circle : public Shape {
public:
bool equal( const Shape* pOther ) const {
const Circle* pOtherCircle = dynamic_cast<const Circle*>( pOther );
if( pOtherCircle == NULL ) return false;
// compare circle members
}
};
class Rectangle : public Shape {
public:
bool equal( const Shape* pOther ) const {
const Rectangle* pOtherR = dynamic_cast<const Rectangle*>( pOther );
if( pOtherR == NULL ) return false;
// compare rectangle members
}
};
Shape* pFindThis = new Circle(point(1,2),3);
vector<Shape*>::const_iterator itFound = find_if(s1.begin(),s1.end(),
bind1st( mem_fun( &Shape::equal ), pFindThis) ) );
delete pFindThis; //leak resolved by Mark Ransom - tx!
if( itFound != s1.end() ) {
(*itFound)->move(point(10,20));
}