2016-10-10 6 views
0

簡単な質問:私はクラスという名前の何かを持っている場合はC++配列コンストラクタの引数

だが、私は私のクラスでは

int a[2]; 
int b[2]; 

public: 

classname(int a[], int b[]); // Constructor 

ような何かをしたとしましょう、その後(関係ない)と(プライベートメンバー)これらの点(aとb)を初期化するデフォルトのコンストラクタ(必須)が必要です。

int main(){ 

classname x({4,5},{1,10}); 

return 0; 
} 

しかし、私には一致するコンストラクタがないというエラーが表示されます。私はまた、コンストラクタで[]の代わりに*を試しましたが、とにかく動作しないようです。私は何かが欠けているだけです。私はそれを基本的なC++で単純に保つようにしています。

ありがとうございます。

+0

残念ながら、投稿したときにそれを見逃しました – Miguel

+1

'std :: array'を調べることをお勧めします。 – NathanOliver

答えて

0

配列は{ }を使用してのみ初期化できないという問題があります。これを行うとき、彼らは初期化することができ 、

int arr[4] = {0, 1, 2, 3}; 

だけあなたは、配列が持つサイズC++を「伝える」されているので。コンストラクタでこれを行おうとすると、配列のサイズがわからないので失敗します。 達成したいことは、標準コンテナを使用して行うことができます。 @ NathanOliverが示唆したように、std::arrayを使用できますが、この方法では配列の固定サイズを指定する必要があります。

#include <array> 

class Test 
{ 
public: 
    Test(std::array<int, 4> a) {}; 
}; 

// now you can call it 
Test obj1({0, 1, 2, 4}); 

しかし、あなたはそれがより柔軟でない配列のサイズを修正するためにバインドしたい場合は、私が代わりにstd::vectorを使用してお勧めします。

#include <vector> 

class Test 
{ 
public: 
    Test(std::vector<int> a) {}; 
}; 

// now you can call it with as many objects as you want 
Test obj1({0, 1, 2, 4, 5, 6, 7, 8}); 
関連する問題