2016-12-03 1 views
1

Hier ist das folgende Programm. Es ist nur ein Rechteck basierend auf 2 Punkten. Mein Problem ist der Rectangle-Konstruktor.Member Initialisierungsliste für Smart-Pointer zu benutzerdefinierten Struktur

#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; 
} 

Wie es scheint, mache ich die Initialisierung nicht richtig. MSVC gibt mir den Fehler expected a '(' or a '{'. Ich bin hier verwirrt. Wie initiiere ich die _pData Struktur durch diesen Konstruktor richtig?

Antwort

1

Sie sollten selbst initialisieren, nicht seine Mitglieder. z.B.

Rectangle(Point ulhc, Point lrhc) : 
    _pData(new RectData{ulhc, lrhc}) 
{} 
Verwandte Themen