2016-12-31 7 views
-1

3つのコンテナに一度にアクセスする方法はありますか?私はいくつかのゲッターを設定したいと思いますなぜ私はこれらのコンテナに他のクラスからアクセスする可能性を持っていると思い1つのゲッタに3つのコンテナを返す方法はありますか?

class DataContainer 
{ 

private: 
    std::vector<Rental*> rentals; 
    std::vector<Vehicle*> vehicles; 
    std::vector<Client*> clients; 

public: 
    DataContainer(); 
    bool loadObjects(); 
    bool createRentals(); 
    std::string showVehicles() const; 
    std::string showClients() const; 
    std::string showDetails() const ; 
    std::tuple< std::vector<Vehicle*>type1, std::vector<Client*>type2, std::vector<Rental*>type3 > getContainers(); 
    virtual ~DataContainer(); 

}; 

、それはだが、ここに私の問題が来る: 私のようなクラスがあります。私が何か間違ったことをやっている場合、私は知らないが、私は取得エラーは、次のとおりです。

include\DataContainer.h|74|error: template argument 1 is invalid| 
||=== Build failed: 1 error(s), 2 warning(s) (0 minute(s), 1 second(s)) ===| 

私の関数は次のようになります。

std::tuple< std::vector<Vehicle*>type1, std::vector<Client*>type2, std::vector<Rental*>type3 > DataContainer::getContainers() 
{ 
    return std::make_tuple(vehicles,clients,rentals); 
} 

ホープ誰かが私にいくつかのヒントを与えることができるようになります、それが何か違いがあれば、私はC++ 11で作業しています。

+1

'std :: tuple 'は、 'T1、T2、T3'が型であると想定しています。 'std :: vector type1'は有効な型ではありません。 'std :: vector 'はです。 – DeiDei

+2

'type2'などは、' std :: tuple type1、std :: vector type2、std :: vector type3> getContainers(); '行にあるべきではありません。しかし、これはまずクラスデザインがかなり壊れているように見えます。 –

+1

エラーが修正されたとしても、3つのベクトルを返すだけで**多くの**ポインタをコピーすることになります。あなたは何を達成しようとしていますか? – StoryTeller

答えて

4

タイプは、フィールド名が無効です

std::tuple< std::vector<Vehicle*>, std::vector<Client*>, std::vector<Rental*>> 

でなければなりません。

タプルの代わりに、3つのコンテナを含む構造型を定義して返すことができます。

+2

私を打つ! upvoteを持っている:) – StoryTeller

関連する問題