2017-05-07 16 views
-2

構造体内のベクトルのベクトルを作成することによって宣言されている行列から要素を索引付けしようとしています。 は、ここに私のコードです:コンパイル中構造体のインデックス行列要素member

#include <vector> 
using namespace std; 

const int MAX_DIM = 1000; 

struct TestStruct{ 
    int MAX_DIM; 
    vector<vector<int> > matrix (int MAX_DIM, vector<int>(int MAX_DIM)); 
}; 

int main(){ 
    TestStruct ts; 
    ts.MAX_DIM = 100; 
    ts.matriz[0][0] = 1; 

    return 0; 
} 

私は次のエラーを受け取ってきました:

test.cpp:14:17: error: invalid types ‘<unresolved overloaded function type>[int]’ for array subscript 
    mierda.matriz[0][0] = 1; 

ところで、あなたはより何か他のものを使用しなくても(マトリックスを宣言するため、他の「クリーン」な方法を知っていますかクラスVectorからのベクトル)?

ありがとうございます!

vector<vector<int> > matrix (int MAX_DIM, vector<int>(int MAX_DIM)); 

あなたstruct内部のマトリックスを作成します:あなたのコードとあなたのロジックで

+1

s/matriz/matrix/ – juanchopanza

+2

これは行列を宣言していないので、関数を宣言しています。 –

+0

行列を宣言するために私はどのように訴えていますか? – pitazzo

答えて

1

問題は、ラインが考えることです。実際で

、あなただけvector<vector<int>を返すmatrixという名前の関数を宣言しました。あなたのstruct内のメンバオブジェクトを持つために、次のような、括弧を削除する必要があります。

vector<vector<int> > matrix; 

私はあなたが最初のMAX_DIM値を指定し、その値に基づいてマトリックスを作成するとします。その値をMAX_DIMに割り当て、その値に基づいてmatrixを作成するか、またはmatrixにアクセスする前に呼び出す必要があるinitialise()関数を作成するために、引数としてintを引数に持つコンストラクタを作成することをお勧めします。

まず、望ましい解決策:

using namespace std; 
const int MAX_DIM = 1000; 

struct TestStruct{ 
    TestStruct(int MD){ 
     MAX_DIM = MD; 
     matrix = vector<vector<int>>(MD, vector<int>(MD)); 
    } 

    int MAX_DIM; 
    vector<vector<int>> matrix; 

}; 

int main(){ 

    TestStruct ts(100); // matrix 100 by 100 
    ts.matrix[0][0] = 1; // works 

    return 0; 
} 

それとも、あなたはコンストラクタに対処しない場合:

using namespace std; 
const int MAX_DIM = 1000; 

struct TestStruct{ 

    int MAX_DIM; 
    vector<vector<int>> matrix; 

    void initialise(){ 
     matrix = vector<vector<int>>(MAX_DIM, vector<int>(MAX_DIM)); 
    } 

}; 

int main(){ 

    TestStruct ts; 
    ts.MAX_DIM = 100; // specify the size 
    ts.initialise(); // construct the matrix 
    ts.matrix[0][0] = 1; // works again 

    return 0; 
} 

最初のソリューションは、以下のコードを必要としていることに注意してくださいmain機能の中でより読みやすい。 2番目の方法を選択した場合は、MAX_DIMに値を割り当てるか、initialise()に値を割り当てるのを忘れてしまいます。

関連する問題