crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

QMainWindow
  опции профиля:
сообщение 14.3.2012, 22:42
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 1.8.2010
Пользователь №: 1922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Всем добрый вечер!
Забыл, как объявлять двумерные массивы... Обычно пользую QVector, а тут понадобился обычный массив. Нужен массив, у которого глобальная видимость. В заголовочном файле пишу так:
GLfloat **u;
В исходных тектах так:
u = new GLfloat[Nx*Ny][3];
Переменные Nx и Ny известны. Пишет ошибку: cannot convert 'GLfloat (*)[3]' to 'GLfloat**' in assignment. Как там правильно это делать? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов (1 - 4)
Алексей1153
  опции профиля:
сообщение 15.3.2012, 6:14
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


QMainWindow,

тебе нужно массив указателей на массивы , но лучше сразу через STL - это удобнее, чем с new возиться

#include <vector>

typedef std::vector< std::vector<GLfloat> > td_2array;

td_2array m_Array;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 15.3.2012, 7:10
Сообщение #3


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


вообще, если тройка у тебя - константа, то можно написать так:
GFloat (*u)[3];


а если нет - то сначала выделять массив указателей, а потом, в цикле - отдельные элементы для каждого указателя. это если подходить теоретически правильно. а так, можно ещё написать GFloat *u и и использовать массив размера Nx*Ny*3, вычисляя смещения перемножением координат.

Сообщение отредактировал Iron Bug - 15.3.2012, 7:16
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 15.3.2012, 18:52
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 1.8.2010
Пользователь №: 1922

Спасибо сказали: 0 раз(а)




Репутация:   0  


Спасибо! А методы QtOpenGL съедят std::vector? Типа glDrawElements()?

У меня именно двумерный массив должен быть(
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 16.3.2012, 8:14
Сообщение #5


фрилансер
******

Группа: Участник
Сообщений: 2944
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


QMainWindow, а, вона чего. Тогда вложенный вектор отпадает - придётся использовать одномерный, но размером Nx*Ny

достать указатель на массив из непустого вектора можно так:

//объявление и инициализация
std::vector<GFloat> m_v;
m_v.resize(Nx*Ny,0);

//указатель на массив
if(!m_v.empty())
{
   GFloat* p=&m_v[0];
   ...
   int count=m_v.size();//количество элементов (не байтов!!!)
}


Сообщение отредактировал Алексей1153 - 16.3.2012, 8:15
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.7.2025, 9:15