2011-02-09 12 views
1

リスト私が唯一のメンバーを持っているC++、中Poly3Dクラスを持っている:list<Point_3>取得のstd ::参照

using namespace std; 

struct Poly3D 
{ 
public: 
    Poly3D(const list<Point_3> &ptList); 


private: 
    list<Point_3> ptList; 

}; 

私の質問は、参照することにより(C#の意味で)取得する方法を、そうですPoly3D.ptListにアクセスするたびに同じコピーが返されますか?

答えて

2
#include <list> 
using namespace std; 

struct Point_3{ 
}; 

struct Poly3D 
{ 
public: 
    Poly3D(const list<Point_3> &ptList); 
    list<Point_3>& GetPointList(); 


private: 
    list<Point_3> ptList; 

}; 

list<Point_3>& Poly3D::GetPointList(){ 
    return ptList; 
} 

int main(void){ 
    list<Point_3> myList; 
    Poly3D myPoly(myList); 
    list<Point_3>& myListRef = myPoly.GetPointList(); 
} 
+0

'GetPointList()'の 'const'メソッドがうまくいかないと思います。コンパイルすることはできません。 – Graviton

+0

'const'は忘れて、getter関数を常に宣言するのは私の習慣です。const:: '編集しました。今すぐコンパイルする必要があります。 – Xeo

+0

[このトピック](http://stackoverflow.com/questions/984107/returning-stl-lists-as-argument#comment46271122_984133)によれば、 'list &GetPointList()'のコンパイルはコンパイラによって成功します。 'typedefリスト&MyListRef'を追加し、コンパイルするためにその型を返します。 – Daan

5

あなたが本当にlistへの直接アクセスを提供したい場合は、単に参照によって返すゲッターを書く:

struct Poly3D 
{ 
public: 
    ... 

    list<Point_3> &getList() 
    { 
     return ptList; 
    } 

... 
}; 

しかし、あなたはあなたにもちょうどlistメンバーを行うことができる、ということをやっている場合public

+0

ダミット、あなたは私にそれを打つ。 :) – Xeo

関連する問題