0

だから私は単純な配列であるクラス名リポジトリを持っています.Hereはクラスの一部です:

template<class Element>
class repository {
private:
    int size;
    int capacity;
    Element* elements;

参加者という名前の別のクラスがあります。参加者のリポジトリを持ち、コントローラーという名前の新しいクラスを使用してそのリポジトリでアクションを実行したいのですが、コントローラーでリポジトリのタイプを宣言する方法がわかりません。

クラス参加者の一部を次に示します。

class participant {
private:
    int position;
    int score;

そして、ここにクラスコントローラーの一部があります:

#include "repository.h"
#include "participant.h"
class controller {
private:
    repository repository;
    repository temporary;
    void createCopy();
public:
    controller();
    controller(repository repo);

そして、私はエラーを受け取ります:

-無効な使用のテンプレート名 'repository' 引数リスト int なしのリポジトリ リポジトリおよびリポジトリ テンポラリの行。

-controller(repository repo) の行の「repo」の前に「)」が必要です。

他のエラーが発生しないように、クラスコントローラーの宣言でリポジトリと一時の型を宣言するにはどうすればよいですか?

4

1 に答える 1

4

リポジトリはクラス テンプレートであるため、データ メンバーを次のように宣言する必要があります。

private:
    repository<SomeType> repository; // but this hides repository name
    repository<SomeType> temporary;  // repository has another meaning now!

SomeTypeこの場合はおそらくどこでしょうparticipantrepositoryそれ自体ではタイプに名前を付けませrepository<int>repository<std::string>。次に、データ メンバー名を にすることはできません。repositoryこれは に必要なテンプレート名だからですtemporary。したがって、データ メンバーの名前を変更します。

private:
    repository<SomeType> repo_;

同様に、コンストラクターは型を取る必要があります。

controller(repository<participant> repo);

repoおそらくconst参照で渡したいでしょうが:

controller(const repository<participant>& repo);
于 2012-04-04T10:00:52.660 に答える