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

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

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.09.2013, 17:13     Азы классов. Подскажите, плз #1
Здравствуйте!
Помогите, пожалуйста, разобраться.
Вот код:
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); )


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

vodilawofer, к сожалению я еще не знаю, что обозначает * .
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.09.2013, 17:26     Азы классов. Подскажите, плз #5
andrejap, Ну собственно static добавляем и все. Правда все равно довольно странно. Задание можно озвучить?
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 я и пытаюсь записать в этот вектор.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
09.09.2013, 17:29     Азы классов. Подскажите, плз #7
Цитата Сообщение от andrejap Посмотреть сообщение
Как я вообще вижу картину
и всё же
Цитата Сообщение от ForEveR Посмотреть сообщение
Задание можно озвучить?
Добавлено через 50 секунд
Цитата Сообщение от andrejap Посмотреть сообщение
к сожалению я еще не знаю, что обозначает *
То есть с указателями Вы не знакомились еще?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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);
}
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;
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
09.09.2013, 17:40     Азы классов. Подскажите, плз #10
andrejap, Объявляет.
Если подробнее то: если объект не статический, то он инициализируется в конструкторе класса, ежели объект статический - то у него нет возможности инициализироваться в конструкторе, поэтому нужно инициализировать его явно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2013, 17:52     Азы классов. Подскажите, плз
Еще ссылки по теме:

Подскажите плз, почему не работает C++
C++ Подскажите плз (на каком языке программирования легче писать ПК игры?)
C++ я изучил "школьные" азы программирования на c подскажите какиенибудь несложные задачи

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

Или воспользуйтесь поиском по форуму:
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
09.09.2013, 17:52  [ТС]     Азы классов. Подскажите, плз #11
Ясно. Спасибо!
Yandex
Объявления
09.09.2013, 17:52     Азы классов. Подскажите, плз
Ответ Создать тему
Опции темы

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