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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
#1

создать вектор STL в классе - C++

15.07.2009, 13:25. Просмотров 1887. Ответов 10
Метки нет (Все метки)

Здравствуйте всем
Вопрос касается STL векторов внутри класса. Ситуация такая: есть изображение (двухмерная матрица) био клеток. Нужно создать класс для каждой клетки. В классе должны храниться объем клетки, площадь клетки, и множество всех точек изображения, которые принадлежат этой клетке. Каждый элемент этого множества содержит координтаты по х и у (тоесть массив из 2-х элементов). Количество элементов заранее не известно и может со временем менятся. Пытаюсь сотворить следующее (черновой вариант):


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
typedef std::vector<int[2]> PosXY;
 
    class Cellule
    {public:
    int posX;
    int posY;
    int Number;
    PosXY& p;
 
    Cellule();
    Cellule(int pos_X, int pos_Y, int Number_cell, PosXY _posXY)
    {posX=pos_X;
    posY=pos_Y;
    Number=Number_cell;
    p = _posXY;
    };
    //~Cellule();
};
получаю ошибки:

1>Functions_matrix.cpp
1>c:\functions_matrix.h(32) : error C2758: 'seg::Cellule:: p' : must be initialized in constructor base/member initializer list
1> c:\phaseview\code\biosegmentation\segmentationlib\functions_matrix.h(29) : see declaration of 'seg::Cellule:: p'
1>.\Functions_matrix.cpp(136) : error C2661: 'seg::Cellule::Cellule' : no overloaded function takes 3 arguments
1>Build log was saved at "file://c:\PhaseView\Code\BioSegmentation\SegmentationLib\BioSegmentation.dir\Debug\BuildLog.htm"
1>BioSegmentation - 2 error(s), 0 warning(s)

Подскажите, пожалуйста, как правильно создать такой класс
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2009, 13:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос создать вектор STL в классе (C++):

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

Вектор (не из STL) из структур - C++
привет Ребят, задача была поставлена так: нужно сделать прогу, которая бы считывала слова из файла, записывала и сортировала их в...

В классе инициализировать массив, в классе создать функцию вывода массива на экран - C++
Прошу помоши с выводом данных, которые содержаться в массиве, на экраy: Задача: В классе инициализировать массив, в классе создать...

Библиотека STL, класс вектор - C++
Помогите написать прогу... вот задание: Использовать класс vector библиотеки STL для хранения каталога книг. Книги характеризуются...

Как устроен вектор (STL) ? - C++
Вот такой вот вопросец возник. Как организовано хранение вектора в памяти? Последовательно располагаются именно сами данные, или может быть...

STL вектор динамических объектов - C++
Нужно время от времени ложить в std::vector (или std::list) динамические объекты. Под динамическим объектом здесь понимается объект,...

10
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
15.07.2009, 13:44 #2
Так делать нельзя.
Код
 PosXY[COLOR="Red"]&[/COLOR] p;
Каким образом ты будешь добавлять елементы в вектор?
0
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 13:49  [ТС] #3
а как можно? я собираюсь циклом по i и j пройтись по изображению, и если точка принадлежит данной клетке, добавить ее в вектор. Вернее, проходить буду даже не по изображению, а по маске, где 0 это точки фона а не нулевые значения соответствуют номеру клетки.
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
15.07.2009, 14:03 #4
C++
1
Cellule(int pos_X, int pos_Y, int Number_cell, PosXY _posXY):p(_posXY)
и лучше пиши
C++
1
typedef std::vector<std::pair<int,int> > PosXY;
1
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 14:11  [ТС] #5
спасибо, откомпилировалось. Сейчас попробую написать код, заполняющий вектор
0
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
15.07.2009, 14:14 #6
так правильнее
Код
Cellule(int pos_X, int pos_Y, int Number_cell, [COLOR="Red"]const[/COLOR] PosXY [COLOR="#ff0000"]&[/COLOR]_posXY):p(_posXY)
1
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 15:29  [ТС] #7
Хорошо, а как мне теперь в программе объект класса создать?

у меня есть

C++
1
typedef std::vector<Cellule> CellArray;
я хочу для заданой точки (i,j) создать объект cell класса Cellule и записать этот объект в вектор CellArray

C++
1
CellArray.push_back(new Cellule(i,j, Number_cell, std::pair(i,j)) );
ошибка
1>.\Functions_matrix.cpp(138) : error C2143: syntax error : missing ';' before '.'
1>.\Functions_matrix.cpp(138) : error C2143: syntax error : missing ';' before '.'

как правильно?
0
Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
15.07.2009, 15:36 #8
CellArray-это у тебя тип,а не объект.
Надо примерно так
C++
1
2
3
4
5
typedef std::vector<Cellule*> CellArray;
...
CellArray arrayCell;
...
arrayCell.push_back(new Cellule(i,j, Number_cell, std::pair(i,j)) );
0
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 15:40  [ТС] #9
спасибо, это я исправила. Но я так подозреваю, что ему еще не нравится
C++
1
std::pair(i,j)
в строчке
C++
1
arrayCell.push_back(new Cellule(i,j, Number_cell, std::pair(i,j)) );
?
0
ISergey
Maniac
Эксперт С++
1375 / 886 / 52
Регистрация: 02.01.2009
Сообщений: 2,661
Записей в блоге: 1
15.07.2009, 15:49 #10
вот смотри
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <vector>
#include <algorithm>
 
typedef std::vector< std::pair<int, int> > vector_p;
 
class Employee{
public:
    Employee(std::pair<int, int> &p){
        v.push_back(p);
    }
private:
    vector_p v;
};
 
typedef std::vector<Employee> vector_e;
int main()
{
    vector_e e;
    e.push_back(Employee( std::pair<int, int>(10,20) ));
    return 0;
}
1
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 15:53  [ТС] #11
вроде ясно, спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2009, 15:53
Привет! Вот еще темы с ответами:

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют создать нулевой вектор и вектор с...

STL, istream_iterator, в вектор считывается неверное количество символов - C++
Имеется программа, в которой происходит посимвольное чтение из файла в вектор: #include &lt;fstream&gt; #include &lt;iostream&gt; #include...

Вектор в классе - C++
Всем привет. С векторами завис. Как в классе вектор двумерный yпрописать правильно. Есть двумерный вектор. vector &lt;vector &lt;int&gt;...

Не могу объявить вектор в классе - C++
Здравствуйте. Изучаю С++, пишу игру &quot;Покер&quot;.) Только начал и сразу столкнулся с проблемой. При объявлении массива стрингов с помощью...


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

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

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