Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

12.04.2009, 09:29. Просмотров 1631. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вопрос по динамической памяти (C++):

Распределение динамической памяти! - C++
У нас есть 2 упорядоченных массива. Надо создать 3-ий упорядоченный массив который состоит из первых двух. #include &lt;stdio.h&gt; ...

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

Выделение динамической памяти - C++
Чем int *List = new int; delete List; отличается от обычного массива (int List) ? Нет, я понимаю, что создал динамическую...

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

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

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

7
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 10
Регистрация: 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
2794 / 1380 / 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);
                }
        }
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
2794 / 1380 / 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 секунд
просто на двумерный массив нельзя делать одинарный указатель *..только двойной **
0
accept
4831 / 3252 / 165
Регистрация: 10.12.2008
Сообщений: 10,569
12.04.2009, 12:05 #7
Код
fild[i][j].transparent=1;
Код
fild[i][j]->transparent=1;
0
Monte-Cristo
2794 / 1380 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
12.04.2009, 12:19 #8
Цитата Сообщение от accept Посмотреть сообщение
fild[i][j].transparent=1;
fild[i][j]->transparent=1;
нет, accept, в данном случае нет.. потому-что мы работаем с указателем как с массивом..поэтому использует операция '.' а не '->', если бы мы работали через адресную арифметику
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2009, 12:19
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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