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

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

Войти
Регистрация
Восстановить пароль
 
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,134
#1

Передать инициализированный std::vector конструктору базового класса - C++

05.04.2014, 20:38. Просмотров 447. Ответов 6
Метки нет (Все метки)

В общем появилась одна проблема. Никак не пойму как можно сделать. В общем дело такое:
1) Есть класс Coord, который содержит координаты.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef COORD_H
#define COORD_H
 
class Coord
{
    public:
        Coord(int, int);
        int getX(){return x;}
        int getY(){return y;}
    private:
        int x, y;
};
 
Coord::Coord(int x_, int y_):
    x(x_),
    y(y_)
{
    ;
}
 
#endif
2) Есть класс ParentClass, который содержит std::vector этих координат, манипулирует этим вектором и делает, что хочет, но есть условие: инициализироваться этот вектор должен в конструкторе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#ifndef PARENT_H
#define PARENT_H
 
#include "Coord.h"
 
class ParentClass
{
    public:
        ParentClass(std::vector<Coord>);
        void print();
        
        const int VeryCoolAwesomeInfo;
    private:
        std::vector<Coord> vec;
};
 
ParentClass::ParentClass(std::vector<Coord> vec_):
    vec(vec_), 
    VeryCoolAwesomeInfo(100)
{
    ;
}
 
void ParentClass::print()
{
    for (int i = 0; i < vec.size(); i++)
        std::cout << vec[i].getX() << std::endl;
}
 
#endif
3) Есть класс ChildClass, унаследованный от ParentClass, в конструкторе которого в списке инициализации должен вызваться конструктор ParentClass(std::vector<Coord>) с соответствующей передачей аргумента.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#ifndef CHILD_H
#define CHILD_H
 
#include "Parent.h"
 
class ChildClass: public ParentClass
{
    public:
        ChildClass();  
};
 
ChildClass::ChildClass():
    ParentClass(std::vector<Coord>(2, (Coord(10, 10), Coord(20,20)) ) )    //вот здесь загвоздка, здесь я хочу передавать нужные Coord
{
    ;
}
 
#endif
Но не тут то было. Если передавать, как передал я, (Coord(10, 10), Coord(20,20)), то инициализируется передаваемый вектор только Coord(20,20), а Coord(10,10) откинется. Я так написал, потому-что не знаю как все таки в базовый класс передать все что я хочу, как Coord(10, 10), так и Coord(20,20).
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
 
#include "Child.h"
 
int main(int argc, char *argv[])
{
    ChildClass c;
    c.print();
    system("PAUSE");
    return EXIT_SUCCESS;
}
Выводит (20, 20), (20, 20), а нужно (10,10), (20, 20)
Помогите пожалуйста.

Добавлено через 33 минуты
Ну может кто нибудь сталкивался уже?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2014, 20:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передать инициализированный std::vector конструктору базового класса (C++):

Как передать целочисленную матрицу типа std::vector<std::vector<int> > в функцию? - C++
Здравствуйте. Почитал на форуме, но так и не понял что я делаю не так. Имеется двумерный вектор. Размера .. Нужно его передать в...

На основе исходного std::vector<std::string> содержащего числа, создать std::vector<int> с этими же числами - C++
подскажите есть вот такая задача. Есть список . Создать второй список, в котором будут все эти же числа, но не в виде строк, а в виде...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector - C++
как добавить реализацию конкатенации строк через перегрузку оператора &quot;+=&quot; в классе MyString и почему ошибка выдается???#include...

Передать std::vector в качестве аргумента функции - C++
Задание: определить моду чисел из массива. Вот код: #include &lt;iostream&gt; #include &lt;vector&gt; int mod_a(int, vector&lt;int&gt;); using...

Вывести значения std::vector<std::vector<int*> > - C++
Подскажите, как вывести значения? const size_t row = 3; const size_t col = 3; std::vector&lt;std::vector&lt;int*&gt; &gt; imatrix; //...

Как изменять размер std::vector<std::vector>? - C++
Здравствуйте, как нужно изменять размер std::vector&lt;std::vector&gt; например: std::vector&lt;std::vector&lt;float&gt;&gt; data; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
05.04.2014, 20:54 #2
Цитата Сообщение от dimcoder Посмотреть сообщение
C++
1
ParentClass(std::vector<Coord>(2, (Coord(10, 10), Coord(20,20)) ) ) * *//вот здесь загвоздка, здесь я хочу передавать нужные Coord
Вот так:
C++
1
ParentClass({ Coord(10, 10), Coord(20,20) })
1
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,134
05.04.2014, 21:01  [ТС] #3
Цитата Сообщение от kamre Посмотреть сообщение
Вот так
Вот такая запись мне больше всего нравится и я ее уже пробовал, но к сожалению почему-то не компилится (как же все было бы просто).
Код
Child.h expected primary-expression before '{' token
Где то уже сегодня читал что для такой записи нужна поддержка с++11, написано было подрубить так можно:
g++ -std=c++0x
но у меня wxDevCpp c mingW и почему то такой ключ не воспринимается. Что делать?
0
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.04.2014, 21:05 #4
C++
1
ChildClass::ChildClass(): ParentClass({{10,10}, {20,20}})
Добавлено через 1 минуту
Конструкторам бы вектор по константной ссылке передавать надо, а то ненужное копирование же будет.

Добавлено через 1 минуту
Цитата Сообщение от dimcoder Посмотреть сообщение
g++ -std=c++0x
-std=c++11
2
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
05.04.2014, 21:13 #5
Цитата Сообщение от dimcoder Посмотреть сообщение
Что делать?
Разбираться со средой разработки (можно взять MSVC 2013 Express Edition, там сразу будет работать). В консоли все работает вот так:
>g++ --version
g++.EXE (rev2, Built by MinGW-builds project) 4.8.0
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


>cat 5.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <vector>
 
struct Coord {
  int x, y;
  Coord(int x0, int y0) : x(x0), y(y0) {}
};
 
class Parent {
public:
  Parent(std::vector<Coord> coords) : m_coords(coords) {}
  void print() {
    for (auto c : m_coords)
      std::cout << "(" << c.x << "," << c.y << ")" << std::endl;
  }
private:
  std::vector<Coord> m_coords;
};
 
class Child: public Parent {
public:
  Child() : Parent({ {10, 10}, {20, 20} }) {}
};
 
int main()
{
  Child child;
  child.print();
}
>g++ -std=c++11 5.cpp


>a.exe
(10,10)
(20,20)
1
dimcoder
Полярный
462 / 434 / 68
Регистрация: 11.09.2011
Сообщений: 1,134
05.04.2014, 21:20  [ТС] #6
DiffEreD, kamre, спасибо большое, наконец-то стало все понятно.
Цитата Сообщение от DiffEreD Посмотреть сообщение
-std=c++11
Те же яйца, вид в профиль.
Видимо устарел мой wxDevcpp со всеми потрохами, но к нему я привык. Буду искать на него обновления...
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
05.04.2014, 21:44 #7
Цитата Сообщение от dimcoder Посмотреть сообщение
но к нему я привык. Буду искать на него обновления...
Если, в этой среде, есть возможность подключать другие компиляторы (в Dev C++ - есть), просто подключите какой-нибудь mingw поновее (4.8).
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2014, 21:44
Привет! Вот еще темы с ответами:

Реализовать аналог класса std::string с помощью vector - C++
Помогите, пожалуйста, с кодом к заданию: Реализовать аналог класса std::string с помощью vector Заранее спасибо!

Отсутствует список аргументов для шаблон класса std::vector - C++
Есть функция: LoadFBX(std::vector* pOutVertexVector); на загрузку модели формата FBX в DX. На std::vector выдает ошибку... Что делать?

Std::vector добавить новый элемент собственного класса без использования конструктора копирования - C++
Всем привет! Есть один класс, который я хочу хранить в std::vector. Создать массив, с типом своего класса, грубо говоря. Естественно,...

Std::vector<std::pair<std::vector<int>::iterator, std::vector<int>::iterator> - C++
Вопрос по вектору. Допустим есть вектор, std::vector&lt;int&gt; vec; на каком - то этапе заполнения я ставлю закладку итератора, ...


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

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

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