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

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

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

Азы классов. Подскажите, плз - C++

09.09.2013, 17:13. Просмотров 397. Ответов 10
Метки нет (Все метки)

Здравствуйте!
Помогите, пожалуйста, разобраться.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Name_pairs {
public:
    string name;
    int age;
    vector<Name_pairs> names;
 
    Name_pairs (string n, int a)
        :name(n), age(a)
        {
        }
//private:
};
 void write_pair (Name_pairs p)
    {
       Name_pairs::names.push_back(p);
    }
 
int main()
{
    Name_pairs a("Joe", 22);
    write_pair(a);
}

main.cpp:14:24: error: invalid use of non-static data member ‘Name_pairs::names’
main.cpp:24:20: error: from this location (имеется ввиду эта строчка: Name_pairs::names.push_back(p); )


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

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

Плз подскажите - C++
плз подскажите: я учусь на 1 ом курсе,на программиста уже месяц как прохоцду c++ ,алгортимы итд я не очен хорошо понимаю...

Подскажите плз, почему не работает - C++
Почему-то не работает цикл &quot;for&quot;. При запуске кода в консольном окне переменная &quot;h&quot; проходит от &quot;0&quot; до &quot;diametr&quot;. Но после окончания цикла...

я изучил "школьные" азы программирования на c подскажите какиенибудь несложные задачи - C++
я изучил &quot;школьные&quot; азы программирования на c подскажите какиенибудь несложные задачи вот моя игра называется быки и коровы можете в...

подскажите плз с удалением динамических массивов - C++
От кусочек , на последних строках проблема //deletename; //delete gr; без них все работает (. Нужны ли они и если да то как заставить их...

Где тут ошибка, подскажите плз! - C++
#include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; void main() { SetConsoleOutputCP(1251); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
vodilawofer
29 / 27 / 2
Регистрация: 27.09.2012
Сообщений: 123
09.09.2013, 17:16 #2
vector<Name_pairs> names;
могу предположить что нужно сделать так : vector<Name_pairs*> names;
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.09.2013, 17:18 #3
C++
1
2
3
4
 void write_pair (Name_pairs& p)
    {
       p.names.push_back(p);
    }
Правда смысл этого мне совершенно не понятен. Или же names должен быть статическим (одним для всех экземпляров класса)?
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.09.2013, 17:24  [ТС] #4
Я еще сам не до конца понял смысл.
ForEveR, Вы правы, там ссылка нужна. Да, получается, что он должен быть статическим.

vodilawofer, к сожалению я еще не знаю, что обозначает * .
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.09.2013, 17:26 #5
andrejap, Ну собственно static добавляем и все. Правда все равно довольно странно. Задание можно озвучить?
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.09.2013, 17:27  [ТС] #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Name_pairs {
public:
    string name;
    int age;
    static vector<Name_pairs> names;
 
    Name_pairs (string n, int a)
        :name(n), age(a)
        {
        }
//private:
};
 void write_pair (Name_pairs& p)
    {
       Name_pairs::names.push_back(p);
    }
 
int main()
{
    Name_pairs a("Joe", 22);
    write_pair(a);
}
Теперь так:
/c++/u9.2/main.cpp:24: undefined reference to `Name_pairs::names'

Как я вообще вижу картину: есть класс, в нем есть статический вектор, куда записываются объекты этого типа. Вот такой объект "Joe", 22 я и пытаюсь записать в этот вектор.
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 1
09.09.2013, 17:29 #7
Цитата Сообщение от andrejap Посмотреть сообщение
Как я вообще вижу картину
и всё же
Цитата Сообщение от ForEveR Посмотреть сообщение
Задание можно озвучить?
Добавлено через 50 секунд
Цитата Сообщение от andrejap Посмотреть сообщение
к сожалению я еще не знаю, что обозначает *
То есть с указателями Вы не знакомились еще?
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.09.2013, 17:31 #8
Вот так будет работать. Не было инициализации статической переменной.

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
class Name_pairs {
public:
    string name;
    int age;
    static vector<Name_pairs> names;
 
    Name_pairs (string n, int a)
        :name(n), age(a)
        {
        }
//private:
};
 
vector<Name_pairs> Name_pairs::names;
 
 void write_pair (const Name_pairs& p)
    {
       Name_pairs::names.push_back(p);
    }
 
int main()
{
    Name_pairs a("Joe", 22);
    write_pair(a);
}
1
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.09.2013, 17:35  [ТС] #9
Цитата Сообщение от Croessmah Посмотреть сообщение
То есть с указателями Вы не знакомились еще?
Нет, не знакомился еще. Пока только остановился на главе 9 учебника программированию Б. Страуструпа.

Я упростил задание с книги для начала. Пока самое элементарное - хочу научиться работать с конструкторами, создать свой класс и записывать в статический вектор объекты этого класса.

Не по теме:

Потом реализую поиск элементов и т. д.



Добавлено через 2 минуты
Цитата Сообщение от ForEveR Посмотреть сообщение
vector<Name_pairs> Name_pairs::names;
статические объекты всегда нужно так инициализировать?

а что же тогда делает эта строчка?
static vector<Name_pairs> names;
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
09.09.2013, 17:40 #10
andrejap, Объявляет.
Если подробнее то: если объект не статический, то он инициализируется в конструкторе класса, ежели объект статический - то у него нет возможности инициализироваться в конструкторе, поэтому нужно инициализировать его явно.
1
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.09.2013, 17:52  [ТС] #11
Ясно. Спасибо!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2013, 17:52
Привет! Вот еще темы с ответами:

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

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

Подскажите с конструкторами классов - C++
Напишите пожалуйста кратенькие примеры конструкторов класса. Примеры конструкторов к этому классу пожалуйста (конструктор: копирования,...

Подскажите как сделать выборку из двух классов - C++
Шаблон Строитель(Builder) Реализовать систему, которая будет нанимать различных работников на работы в компанию используя паттерн...


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

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

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