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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 13:25     создать вектор STL в классе #1
Здравствуйте всем
Вопрос касается 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)

Подскажите, пожалуйста, как правильно создать такой класс
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
15.07.2009, 13:44     создать вектор STL в классе #2
Так делать нельзя.
Код
 PosXY[COLOR="Red"]&[/COLOR] p;
Каким образом ты будешь добавлять елементы в вектор?
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 13:49  [ТС]     создать вектор STL в классе #3
а как можно? я собираюсь циклом по i и j пройтись по изображению, и если точка принадлежит данной клетке, добавить ее в вектор. Вернее, проходить буду даже не по изображению, а по маске, где 0 это точки фона а не нулевые значения соответствуют номеру клетки.
Humanitis
 Аватар для Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
15.07.2009, 14:03     создать вектор STL в классе #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;
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 14:11  [ТС]     создать вектор STL в классе #5
спасибо, откомпилировалось. Сейчас попробую написать код, заполняющий вектор
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
15.07.2009, 14:14     создать вектор STL в классе #6
так правильнее
Код
Cellule(int pos_X, int pos_Y, int Number_cell, [COLOR="Red"]const[/COLOR] PosXY [COLOR="#ff0000"]&[/COLOR]_posXY):p(_posXY)
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 15:29  [ТС]     создать вектор STL в классе #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 '.'

как правильно?
Humanitis
 Аватар для Humanitis
172 / 164 / 6
Регистрация: 12.01.2009
Сообщений: 430
15.07.2009, 15:36     создать вектор STL в классе #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)) );
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 15:40  [ТС]     создать вектор STL в классе #9
спасибо, это я исправила. Но я так подозреваю, что ему еще не нравится
C++
1
std::pair(i,j)
в строчке
C++
1
arrayCell.push_back(new Cellule(i,j, Number_cell, std::pair(i,j)) );
?
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
15.07.2009, 15:49     создать вектор STL в классе #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2009, 15:53     создать вектор STL в классе
Еще ссылки по теме:

C++ STL Заполнить вектор длинной 10 случайными числами от 0 до 9 и вывести его в выходной поток
STL Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток C++
Вектор (не из STL) из структур C++
Вектор в классе C++
C++ Как инициализировать вектор в классе?

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

Или воспользуйтесь поиском по форуму:
Etudiante
0 / 0 / 0
Регистрация: 12.04.2009
Сообщений: 47
15.07.2009, 15:53  [ТС]     создать вектор STL в классе #11
вроде ясно, спасибо
Yandex
Объявления
15.07.2009, 15:53     создать вектор STL в классе
Ответ Создать тему
Опции темы

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