1
次のプログラムがあります。 2点に基づいて作成された矩形です。私の問題はRectangleコンストラクタです。ユーザー定義の構造体へのスマートポインタのメンバ初期化リスト
#include <iostream>
#include <memory>
class Point { // class for representing points
public:
Point(int x, int y);
void setX(int newVal);
void setY(int newVal);
};
struct RectData { // Point data for a Rectangle
Point _ulhc; // ulhc = “ upper left-hand corner”
Point _lrhc; // lrhc = “ lower right-hand corner”
};
class Rectangle {
public:
Rectangle(Point ulhc, Point lrhc) :
_pData->_ulhc(ulhc), _pData->_lrhc(lrhc)
{}
Point & upperLeft() const { return _pData->_ulhc; }
Point & lowerRight() const { return _pData->_lrhc; }
private:
std::tr1::shared_ptr<RectData> _pData;
};
int main()
{
Point coord1(0, 0);
Point coord2(100, 100);
const Rectangle rec(coord1, coord2); // rec is a const rectangle from
// (0, 0) to (100, 100)
rec.upperLeft().setX(50); // now rec goes from
// (50, 0) to (100, 100)!
return 0;
}
私は正しく初期化を行っていないようです。 MSVCは私にエラーexpected a '(' or a '{'
を与えます。私はここで混乱している。どのように私はこのコンストラクタを通じて_pData
構造体を適切に初期化するのですか?