2017-11-07 15 views
-1

私は初心者です。私はテンプレートのパラメータとして構造体名を持つクラスの3つの配列をインスタンス化しようとしています。そこから、配列の値を設定するためにミューテータ関数をループして呼び出す必要があります。エラー:(対応できない?)への呼び出しに一致する関数がありません

int main() 
{ 
    GenericRecord<Furniture> furnObj[10][3]; 
    GenericRecord<Building> buildObj[10][3]; 
    GenericRecord<Computer> compObj[10][3]; 

    Building b; 
    Furniture f; 
    Computer c; 

    for (int i = 0; i < 3; i++) 
    { 
     cout << "Enter the identifier for the furniture: "; 
     cin >> f.Identifier; 
     furnObj[i][0].setRecord(f.Identifier); 
    } 
    return 0; 
} 

私は次のようにコンパイラエラーを取得しておいてください。

error: no matching function for call to 'GenericRecord<Furniture>::setRecord(int&)' note: candidate is: note: void GenericRecord<Type>::setRecord(Type) [with Type = Furniture]

私はこの100種類の方法を手直しをしてきた、と私はコンパイルエラーの種類を取得しておきます。私は間違って何をしていますか?ここで

は、テンプレートクラス、メンバー、および構造体である:

struct Furniture 
{ 
    int Identifier; 
    string Description; 
    float Value; 
}; 

template <class Type> 
class GenericRecord 
{ 
    private: 
     Type record; 
    public: 
     void setRecord(Type recParam); 
}; 

template<class Type> 
void GenericRecord<Type>::setRecord(Type recParam) 
{ 
    record = recParam; 
} 
+1

あなたのケースでは 'Type'は' Furniture'ですが、あなたは 'int'である' f.Identifier'を渡しています。 – DimChtz

+3

'furnObj [i] [0] .setRecord(f.Identifier);'を呼び出すのではなく、 'furnObj [i] [0] .setRecord(f);' – Amadeus

+0

を試してみてください。 'setRecord'という関数があり、' set'を引数として取りますが、あなたはそれをint – pm100

答えて

1

(あなたがC++の初心者なら、私はとにかくあなたが右のテンプレートに飛び込むべきだと思いますが、ない...)

GenericRecord<Furniture> furnObj[10][3]; 

これは、Type = Furnitureの場合、GenericRecordオブジェクトの配列を作成します。 Type = Furnitureのため、setRecord(Type recParam)はFurnitureオブジェクトを受け取ることを想定しています。

しかし、をf.Identifierと呼びます(これはintです)。それが問題の原因です。

関連する問題