Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Rise of Death
1 / 1 / 0
Регистрация: 10.03.2009
Сообщений: 24
#1

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

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

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

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

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 .*
А если убрать звездочку при объевлении масива, то потом в ходе выполнения выдает, что доступ запрещен.

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

А как сделать тоже самое, только с динамическим масивом?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2009, 09:29
Ответы с готовыми решениями:

Удаление динамической памяти
В книгах по С++ я читал про утечку памяти. Я решил создать программу, в которой...

Матрица в динамической памяти
Здраствуйте,начал проходить динамическую память ,так немогу зделать 2-х мерный...

Освобождение динамической памяти в vs
Вообщем попался я тут, и так, код: //#define _CRT_SECURE_NO_WARNINGS...

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

Переменная в динамической памяти
class SimpleCircle { public: SimpleCircle (); //Basic constructor...

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

Ошибку выдает в конструкторе.
0
Monte-Cristo
2795 / 1381 / 107
Регистрация: 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);
                }
        }
0
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];
(или могу?)
0
Monte-Cristo
2795 / 1381 / 107
Регистрация: 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 секунд
просто на двумерный массив нельзя делать одинарный указатель *..только двойной **
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
12.04.2009, 12:05 #7
Код
fild[i][j].transparent=1;
Код
fild[i][j]->transparent=1;
0
Monte-Cristo
2795 / 1381 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 12:19 #8
Цитата Сообщение от accept Посмотреть сообщение
fild[i][j].transparent=1;
fild[i][j]->transparent=1;
нет, accept, в данном случае нет.. потому-что мы работаем с указателем как с массивом..поэтому использует операция '.' а не '->', если бы мы работали через адресную арифметику
0
12.04.2009, 12:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2009, 12:19

Вопросы по динамической памяти.
У меня вопросы по работе с динамической памятью. Пожалуйста, помогите...

Выделение динамической памяти
Чем int *List = new int; delete List; отличается от обычного массива...

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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