2014-01-05 2 views
0

Я хотел бы создать класс C++, который принимает в качестве аргумента «вектор» int t [9]. Я не понимаю, почему мой код не работает:векторный аргумент в классе C++

Вот содержание заголовка:

class Matrice3x3{ 
public: 
    int n; 
    int t[9]; 
    Matrice3x3 inverse(); 
    float det(); 
    void print(); 
    Matrice3x3(int u = 3); 
    Matrice3x3(int p[9], int m = 9); 
private: 
}; 

А вот содержание описания класса:

Matrice3x3::Matrice3x3(int u) { 
    n = u*u; 
} 

Matrice3x3::Matrice3x3(int p[9] , int m){ 
    n = m; 
    t = p; 
} 

И я получить эту ошибку:

In constructor 'Matrice3x3::Matrice3x3(int*, int)': 
incompatible types in assignment of 'int*' to 'int [9]' 
t = p; 
^

Я просто не вижу, где я сказал один из [] был указатель ...

спасибо за ответ!

+1

1) в вашем заголовке замените 'int t [9];' на 'int * t;', а назначенный адрес должен быть назначен ранее. 2) почему вы используете «n», если ваш тип Matrix3x3? n равно 9 в любом случае, если это матрица 3x3. –

+0

pour le 2) c'est parce que la question suivante de mon exercice passe à la généralisation aux matrices nxn :) – Gullfaxi171

+0

google для «распада массивов указателям» –

ответ

3

Вы не можете копировать такие массивы. Вы должны скопировать их по элементу или использовать memcpy. В общем случае лучше использовать стандартную библиотеку для контейнеров (std :: vector в этом случае). У вас должна быть веская причина предпочесть массив C-style для стандартного контейнера.

2

Ну, если вы действительно хотите массивы с фиксированным размером, используйте std :: array <> (+++). У Boost также есть определение для pre C++ 11). Вы можете выделить его как std :: array < int, 9>, а затем передать его как объект. Вы также можете использовать функцию члена size() для получения количества элементов (хотя и жестко закодированных в типе), и у него есть другие функции-члены (такие как begin() и end()), которые делают его похожим на контейнер std, поэтому вы можете также использовать алгоритмы std на нем. В принципе, обертка вокруг массива фиксированного размера. Конечно, вы можете пройти по ссылке.

Смежные вопросы