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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Rise of Death
1 / 1 / 0
Регистрация: 10.03.2009
Сообщений: 24
#1

Вопрос по динамической памяти - C++

12.04.2009, 09:29. Просмотров 1585. Ответов 7
Метки нет (Все метки)

мне надо создать масив содержащий структуры.

У меня вот код какой:

Код
vec *fild[10][10];//vec это название структуры
конструктор

Код
for(i=0;i<20;i++)
        {
        for(j=0;j<20;j++)
                {
                fild[i][j]=new (vec);
                fild[i][j].transparent=1;
                fild[i][j].x=i;
                fild[i][j].y=j;
                fild[i][j].sov=sqrt((player1.x-fild[i][j].x)*(player1.x-fild[i][j].x)+(player1.y-fild[i][j].y)*(player1.y-fild[i][j].y));
                
                fild[i][j].ox=(fild[i][j].x)/(fild[i][j].sov);
                fild[i][j].oy=(fild[i][j].y)/(fild[i][j].sov);
                }
        }
Вобщем он у меня все время какие-нибудь ошибки выдает
[C++ Error] Unit1.cpp(31): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(32): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(33): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(34): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(34): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(34): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(34): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(34): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(35): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(36): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(36): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(36): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(37): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(37): E2294 Structure required on left side of . or .*
[C++ Error] Unit1.cpp(37): E2294 Structure required on left side of . or .*
А если убрать звездочку при объевлении масива, то потом в ходе выполнения выдает, что доступ запрещен.

Что я не так делаю?

А как сделать тоже самое, только с динамическим масивом?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2009, 09:29     Вопрос по динамической памяти
Посмотрите здесь:

перераспределение динамической памяти - C++
дан двумерный массив 3х5 выделить динамически память под него, затем перераспределить ее в массив 5х3, затем удалить(выделить и удалить там...

Выделение динамической памяти - C++
Доброго времени суток! я начинающий программист, столкнулась с такой проблемой: выделяю память под динамический массив, например ...

Выделение динамической памяти - C++
Добрый вечер. Помогите разобраться пожалуйста! Суть такова: есть файл, в нем есть данные, мне надо их оттуда считать и вывести на...

Массив в динамической памяти - C++
какая разница между int *x=new int(10); и int *x=new int; ?

Удаление динамической памяти - C++
Всем здрасьте. Имеется вот такая структура. struct ModelType { DWORD FVF; IDirect3DVertexBuffer9* vertexBuffer; ...

Удаление new из динамической памяти - C++
Здравствуйте, у меня есть следующее присвоение: sign-&gt;numb = new int; Мне нужно от него избавиться в конце программы, но delete...

Выделение динамической памяти C++ - C++
Всем доброго времени суток. Вот столкнулся с проблемой и пока что не приходит ничего интересного по поводу её решения. есть у меня метод,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
12.04.2009, 11:25     Вопрос по динамической памяти #2
Ну,звездочку надо убирать. Тут fild[i][j] имеет тип vec*,если я не ошибаюсь.Доступ к приватным членам класса извне запрещен - поэтому про доступ и говорит.
Rise of Death
1 / 1 / 0
Регистрация: 10.03.2009
Сообщений: 24
12.04.2009, 11:42  [ТС]     Вопрос по динамической памяти #3
Это публичный член класса.

Ошибку выдает в конструкторе.
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 11:50     Вопрос по динамической памяти #4
пробуй вот так вот:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vec **fild = new vec*[10];
for (int i=0; i<10; i++) fild[i] = new vec[10];
 
for(i=0;i<20;i++)
        {
        for(j=0;j<20;j++)
                {
                fild[i][j].transparent=1;
                fild[i][j].x=i;
                fild[i][j].y=j;
                fild[i][j].sov=sqrt((player1.x-fild[i][j].x)*(player1.x-fild[i][j].x)+(player1.y-fild[i][j].y)*(player1.y-fild[i][j].y));
                
                fild[i][j].ox=(fild[i][j].x)/(fild[i][j].sov);
                fild[i][j].oy=(fild[i][j].y)/(fild[i][j].sov);
                }
        }
Rise of Death
1 / 1 / 0
Регистрация: 10.03.2009
Сообщений: 24
12.04.2009, 11:57  [ТС]     Вопрос по динамической памяти #5
vec **fild = new vec*[10];
А как это должно выглядеть в классе?

у меня класс (форма), я же не могу в конструкторе написать
Код
vec **fild = new vec*[10];
(или могу?)
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 12:03     Вопрос по динамической памяти #6
C++
1
2
vec **fild = new vec*[10];
for (int i=0; i<10; i++) fild[i] = new vec[10];
это создание двумерного массива (матрицы) размером 10 на 10, каждый элемент которой есть класс fild. если у тебя суть была чтоб динамически создать, тогда так.... это почи равносилььно
C++
1
vec fild[10][10];
я просто не знаю что ты собирался делать,..

Добавлено через 38 секунд
просто на двумерный массив нельзя делать одинарный указатель *..только двойной **
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
12.04.2009, 12:05     Вопрос по динамической памяти #7
Код
fild[i][j].transparent=1;
Код
fild[i][j]->transparent=1;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2009, 12:19     Вопрос по динамической памяти
Еще ссылки по теме:

выделение динамической памяти - C++
помогите пожалуйста , нужно написать функцию для ввода новой матрицы, не получается выделить под него память. класс: mymatrix ::...

Выделение динамической памяти - C++
Всем привет. Возникла задача, в которой мне необходимо знать как выделяется динамическая память средсвами new/delete. А именно,...

Теория по динамической памяти - C++
Предположим, применяется оператор new в форме для массива: p=new int ;. n ведь может быть и большим. Может n==1000000? Где запоминается,...

Освобождение динамической памяти - C++
После первого вызова функции(при повторном) пишет ошибку. В функции sort один из элементов массива становится недоступным для чтения. Если...

Переменные в динамической памяти! - C++
подскажите как реализовать такое задание: Разместите в динамической памяти две переменные типа структура, содержащую информацию о...


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

Или воспользуйтесь поиском по форуму:
Monte-Cristo
2787 / 1373 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 12:19     Вопрос по динамической памяти #8
Цитата Сообщение от accept Посмотреть сообщение
fild[i][j].transparent=1;
fild[i][j]->transparent=1;
нет, accept, в данном случае нет.. потому-что мы работаем с указателем как с массивом..поэтому использует операция '.' а не '->', если бы мы работали через адресную арифметику
Yandex
Объявления
12.04.2009, 12:19     Вопрос по динамической памяти
Ответ Создать тему
Опции темы

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