Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
#1

Указать параметром шаблона статическую матрицу - C++

30.04.2014, 13:08. Просмотров 317. Ответов 11
Метки нет (Все метки)

C++
1
2
3
int matrix[2][3];
List<int**> list;
list << matrix;
no match <int**> and <int(*)[2][3]>

Как правильно указать параметр шаблона тогда?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2014, 13:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указать параметром шаблона статическую матрицу (C++):

Функция-друга шаблона класса с не типовым параметром - C++
Доброго времени суток. Около полугода изучаю C++, и у меня возник не большой вопрос. Опуская некоторые подробности, предположим, что у...

Как инициализировать члены класса, являющегося параметром шаблона - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; template &lt;typename SomeClass&gt; class Array { private : ...

Матрицы. Указать индексы элемента с найденным значением. Отсортировать матрицу по убыванию - C++
Дана действительная матрица размера n*m, все элементы которой различны. В каждой строке выбирается элемент с наименьшим значением. Затем...

Определение метода-шаблона за пределами шаблона класса - C++
День добрый! Разбираюсь в шаблонах, решил копнуть поглубже. Вот пример: template &lt;typename T1&gt; class K // шаблон класса { public:...

Функция содержащая статическую переменную - C++
Начал разбираться с статическими ф-циями, и прикидывал простые примеры. Но дошел до того, что никак не могу понять как там получается: ...

Создать статическую библиотеку к программе - C++
У меня есть программа и к ней надо создать статическую библиотеку. Не совсем понимаю, как это воплотить.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
30.04.2014, 16:11 #2
Попробуй так
C++
1
2
typedef int Matrix[2][3];
List<Matrix> list;
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
30.04.2014, 16:27  [ТС] #3
Цитата Сообщение от nmcf Посмотреть сообщение
typedef int Matrix[2][3];
List<Matrix> list;
Много ошибок. Конкретно с QList работаю, но тут не суть в нем.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.04.2014, 16:51 #4
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
Как правильно указать параметр шаблона тогда?
List<int*>
nmcf
5309 / 4629 / 1550
Регистрация: 14.04.2014
Сообщений: 18,437
30.04.2014, 20:55 #5
Ну мы же не видим, что ты дальше с этим делаешь.
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
30.04.2014, 22:17  [ТС] #6
Цитата Сообщение от Jupiter Посмотреть сообщение
List<int*>
no match <int*> and <int[2][3]>
а если list << &matrix;
no match <int*> and <int(*)[2][3]>

Добавлено через 2 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
Ну мы же не видим, что ты дальше с этим делаешь.
ошибка при добавлении элемента в список
DrOffset
7090 / 4231 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
30.04.2014, 22:24 #7
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
ошибка при добавлении элемента в список
Код покажи где ты с этим списком работаешь.
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
30.04.2014, 22:27  [ТС] #8
Цитата Сообщение от nmcf Посмотреть сообщение
1
2
typedef int Matrix[2][3];
List<Matrix> list;
request for member '~int[2][3]' in '*(int(*)[2][3])to', which is of non-class tpe 'int[2][3]'

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
Код покажи где ты с этим списком работаешь.
C++ (Qt)
1
2
3
4
typedef int Matrix[2][3];
QList<Matrix> list;
Matrix matrix;
list << matrix;
Всё.
DrOffset
7090 / 4231 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
30.04.2014, 22:38 #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
gore-lykovoe, я так и думал. "Статические" массивы в С++ и С не копируются по значению. Они не объекты первого класса. Соответственно нельзя создать контейнер таких недообъектов. Потому что контейнеры обычно требуют свойств copy-constructable и copy-assignable, коих у массивов нет. Массивы можно копировать только поэлементно. Ты ведь знаешь, что массивы "теряют" свой размер при передаче в функцию, потому что по-умолчанию приводятся к указателю?
Чтобы все-таки это заработало, нужно сделать массив полноценным объектом. Для этого предназначен класс std::array. Вот пример, без QList но с тем же смыслом.
C++
1
2
3
4
5
6
7
8
9
10
#include <array>
#include <list>
 
int main()
{
    typedef std::array<std::array<int, 3>, 2> Matrix;
    std::list<Matrix> list;
    Matrix matrix;
    list.push_back(matrix);
}
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
30.04.2014, 23:19  [ТС] #10
Цитата Сообщение от DrOffset Посмотреть сообщение
#include <array>
#include <list>
int main()
{
* * typedef std::array<std::array<int, 3>, 2> Matrix;
* * std::list<Matrix> list;
* * Matrix matrix;
* * list.push_back(matrix);
}
no match operand types are 'QList<std::tr1::array<std::tr1::array<int, 3u>, 2u>>' and 'Matrix[2][3]
DrOffset
7090 / 4231 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
30.04.2014, 23:42 #11
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
no match operand types are 'QList<std::tr1::array<std::tr1::array<int, 3u>, 2u>>' and 'Matrix[2][3]
Matrix[2][3] - это что, где?

Добавлено через 17 минут
gore-lykovoe, в общем показывай как пробуешь. По ошибке видно, что там еще что-то подмешано. Сразу говорю, код который я дал - рабочий.
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
30.04.2014, 23:44  [ТС] #12
Цитата Сообщение от DrOffset Посмотреть сообщение
в общем показывай как пробуешь. По ошибке видно, что там еще что-то подмешано. Сразу говорю, код который я дал - рабочий.
Забыл удалить [2][3] у объекта. Спасибо большое. Все работает))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 23:44
Привет! Вот еще темы с ответами:

Как выполнить статическую линковку библиотек? - C++
Такая ситуация: скомпилировал на ноуте консольное приложение, на уровне хеллоу ворлда, а на персональном компе оно при запуске выдает...

Научите собирать статическую библиотеку из исходников - C++
Собственно, не могу я этого... В &quot;наборе&quot; есть файлы .h, .m, .in, .c, а также CMakeLists.txt Как из всего этого добра получить lib'у? ...

Как поместить в шаблон статическую переменную? - C++
мучаюсь вторые стуки, не где не могу найти решения проблемы, смысл в следующим, сделал каласс образно говоря контейнер, в нем прописал...

почему линковщик не видит статическую переменную: - C++
почему линковщик не видит статическую переменную: файл aaa.h class aaa { protected: static CStringArray...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.04.2014, 23:44
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru