The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Можно ли использовать вектор как член класса?"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Можно ли использовать вектор как член класса?" 
Сообщение от sandy emailИскать по авторуВ закладки(ok) on 04-Июл-05, 01:07  (MSK)
Имеется:

#include <vector>

struct str {
...
};

class cls {
std::vector<str>v(10);
...
};

void cls::f()
{
v.resize(v.size()+1)
...
}

Ругается следующим образом:
invalid data member initialization
(use `=' to initialise static data members)

Если пробую объявить этот член так:
std::vector<str>v;
не ругается, компилируется. Но - segmentation fault (core dump)

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

2. "Можно ли использовать вектор как член класса?" 
Сообщение от naquad emailИскать по авторуВ закладки(??) on 04-Июл-05, 12:56  (MSK)
>Программеров здесь не любят, тут админы сидят!!!

Для тех хто в танке и не умеет читать, название форума
"Программирование программирование под UNIX".
Так что кто, кого, где, как и куда любит - уточнять не будем.
А вектор вполне нормально используется как член класса, это лбъект, а пропихивание объекта в другой объект никто не отменял.
Простенький пример:
  1 #include <vector>
  2 #include <iostream>
  3 using namespace std;
  4 typedef vector<int> InTvector;//для удобства
  5
  6 class TheTest{
  7         InTvector x;
  8 public:
  9         void add(int val){
10                 x.push_back(val);
11         }
12         int get(){
13                 return x[0];
14         }
15         void pop(){
16                 x.erase(x.begin());
17         }
18         void clear(){
19                 x.clear();
20         }
21 };
22
23 int main(int argc,char* argv[]){
24         TheTest test;
25         test.add(1);
26         test.add(2);
27         cout<<"First is: "<<test.get()<<endl;
28         test.pop();
29         cout<<"After POP operation first is : "<<test.get()<<endl;
30         test.clear();
31         return 0;
32 }

[root@TheNaquad tests]# g++ vect.cpp -o vect
[root@TheNaquad tests]# ./vect
First is: 1
After POP operation first is : 2

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Можно ли использовать вектор как член класса?" 
Сообщение от sandy emailИскать по авторуВ закладки(ok) on 05-Июл-05, 13:57  (MSK)
>А вектор вполне нормально используется как член класса, это лбъект, а пропихивание
>объекта в другой объект никто не отменял.

Спасибо. Но я уже кое-что накопал, а именно:
для того, чтобы использовать вектор как член класса надо в конструкторе инициализировать его:

class cls {
std::vector<int>v;
...
}

cls::cls() : v(10) {}

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Можно ли использовать вектор как член класса?" 
Сообщение от naquad emailИскать по авторуВ закладки(??) on 05-Июл-05, 16:00  (MSK)
>>А вектор вполне нормально используется как член класса, это лбъект, а пропихивание
>>объекта в другой объект никто не отменял.
>
>Спасибо. Но я уже кое-что накопал, а именно:
>для того, чтобы использовать вектор как член класса надо в конструкторе инициализировать
>его:
>
>class cls {
>std::vector<int>v;
>...
>}
>
>cls::cls() : v(10) {}

Это тоже не факт, т.к. он создаётся пустым по дефолту, а в твоём конструкторе он просто резервирует место для 10 элементов. А какие у тебя сообщения компилятора были?
P.S. DeadMustdie - пшёл вон.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Можно ли использовать вектор как член класса?" 
Сообщение от sandy emailИскать по авторуВ закладки(ok) on 05-Июл-05, 23:10  (MSK)
>Это тоже не факт, т.к. он создаётся пустым по дефолту, а в
>твоём конструкторе он просто резервирует место для 10 элементов. А какие
>у тебя сообщения компилятора были?
>P.S. DeadMustdie - пшёл вон.

cls::cls() : v(10) {}
10 - это для примера. Можно и 0
Но пока я не прописал сие в конструктор, при исполнении откомплированного файла выдавалось сообщение segmentation fault (core dump)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Можно ли использовать вектор как член класса?" 
Сообщение от Lazarenko emailИскать по авторуВ закладки on 06-Июл-05, 01:34  (MSK)
>>Это тоже не факт, т.к. он создаётся пустым по дефолту, а в
>>твоём конструкторе он просто резервирует место для 10 элементов. А какие
>>у тебя сообщения компилятора были?
>>P.S. DeadMustdie - пшёл вон.
>
>cls::cls() : v(10) {}
>10 - это для примера. Можно и 0
>Но пока я не прописал сие в конструктор, при исполнении откомплированного файла
>выдавалось сообщение segmentation fault (core dump)

Dear sir! If you will not initialize aggregated vector<T> class, compiler will do it for you by calling default constructor. I.e. if you will write:

Ctr::Ctr()
{
}

then compiler will generate:

Ctr::Ctr() : aggVector()
{
}

So, if you got segmentation fault, then try to debug your application and see what really happens. All code you wrote below is clear.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Можно ли использовать вектор как член класса?" 
Сообщение от sandy emailИскать по авторуВ закладки(ok) on 06-Июл-05, 12:12  (MSK)
>
>Dear sir! If you will not initialize aggregated vector<T> class, compiler will do it for you by calling default constructor. I.e. if you will write:
>
>Ctr::Ctr()
>{
>}
>
>then compiler will generate:
>
>Ctr::Ctr() : aggVector()
>{
>}
>
>So, if you got segmentation fault, then try to debug your application
>and see what really happens. All code you wrote below is
>clear.

Segmentation fault генерировался при исполнении кода aggVector.resize(aggVector.size()+1)
Когда конструктор был переписан:
Ctr::Ctr() : aggVector() {}
все заработало

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ]
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру