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

Определение элементов функции. - C++

Восстановить пароль Регистрация
 
TaiBos
0 / 0 / 0
Регистрация: 13.11.2011
Сообщений: 14
13.11.2011, 19:49     Определение элементов функции. #1
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
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <conio.h>
#include <vector>
 
using namespace std;
 
void print(int i) 
     {
     cout << "Name: " << zap[i].Name << "\n Lastname: " << zap[i].Lastname << endl;
     }
     
struct People {
       char Name[30];
       char Lastname[30];
       };
   
int main (){
    
    int n,schet=0;
    char otv;
    
    vector<People> zap[5];
    
    cout << "Vveditt kol-vo zapicei: ";
    cin >> n;
    
    while (n!=schet) 
    {     if (size(zap)==schet) {zap.resize(zap.size()+1);}
 
          cout << "\n Vvedite " << n << "-nuyu zapic";
          cin >> People[schet].Name >> People[schet].Lastname;
 
          schet++;
    }
    
    schet=0;
    
cout << "Vivesti?(y,n)" << endl;
cin >> otv;
if (otv == "y") {while (n!=schet){print(schet);}} else {exit;}
Ошибок несколько,но меня интересует только одна из них:
*'zap' indeclared.*

Я понимаю,из-за чего она появилась.Если переставить функцию print в конце программы,ошибка исчезнет.
Соответственно:как можно обьявить эти переменные таким образом,что бы функция осталась в начале программы?

*Писать на C++ начал сравнительно недавно,за сим прошу прощения за ламерство.
Надеюсь на вашу помощь.

*Еще один вопрос:какая библиотека содержит описание функции size?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.11.2011, 06:48     Определение элементов функции. #2
надо в функцию print() передать вектор структур zap
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
14.11.2011, 08:38     Определение элементов функции. #3
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
 
struct People
{
    string Name;
    string Name2;
};
 
 
 
class Print: public unary_function<People, void>
{
public:
    void operator()(const People& s)
    {
        cout << s.Name << " " << s.Name2 << "\n";
    }
 
};
 
 
void print(const vector<People>& p)
{
     for_each(p.begin(), p.end(), Print());
}
 
 
 
int main ()
{
 
    vector<People> peoples;
 
    peoples.push_back(People{"n1", "n2"});
    peoples.push_back(People{"n11", "n22"});
    peoples.push_back(People{"n111", "n222"});
    peoples.push_back(People{"n1111", "n2222"});
    peoples.push_back(People{"n11111", "n22222"});
 
 
    print(peoples);
}
TaiBos
0 / 0 / 0
Регистрация: 13.11.2011
Сообщений: 14
14.11.2011, 09:42  [ТС]     Определение элементов функции. #4
Цитата Сообщение от accept Посмотреть сообщение
надо в функцию print() передать вектор структур zap
А каким образом это можно сделать?
Я сделал так:

C++
1
2
3
4
5
6
7
8
9
10
11
void print(int i,People k) 
     {
     cout << "Name: " << k.Name << "\n Lastname: " << k.Lastname << endl;
     }
...
int main()
{
...
if (otv == "y") {while (n!=schet){print(schet,People[schet]);}} else {exit;}
...
}
Пишет-класс People недекларирован.

Цитата Сообщение от PointsEqual Посмотреть сообщение
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
 
struct People
{
    string Name;
    string Name2;
};
 
 
 
class Print: public unary_function<People, void>
{
public:
    void operator()(const People& s)
    {
        cout << s.Name << " " << s.Name2 << "\n";
    }
 
};
 
 
void print(const vector<People>& p)
{
     for_each(p.begin(), p.end(), Print());
}
 
 
 
int main ()
{
 
    vector<People> peoples;
 
    peoples.push_back(People{"n1", "n2"});
    peoples.push_back(People{"n11", "n22"});
    peoples.push_back(People{"n111", "n222"});
    peoples.push_back(People{"n1111", "n2222"});
    peoples.push_back(People{"n11111", "n22222"});
 
 
    print(peoples);
}
Тут для меня тёмный лес.=)
Не могли бы вы объяснить:

C++
1
2
3
4
class Print: public unary_function<People>, void>
{
public:
};
*Тут я вовсе ничего не понял.Создали класс print.Если я не ошибаюсь,согласно синтаксису мы после названия класса не можем поставить ":".Поиск по поводу
C++
1
public unary_function
ничего не дал.Что это за характеристика класса?

Вообще,для меня немного странно:
class Print: public unary_function<People>, void>
В классе 2 характеристики public,к тому же непонятно,к чему относится void и почему он в конце всего этого дела.

Потом идет:

C++
1
2
3
4
   void operator()(const People& s)
        {
                cout << s.Name << " " << s.Name2 << "\n";
        }
Положим,operator-это название ничего не возвращающей функции,ибо на запрос "c++ operator()" гугл отвечает непониманием.Ее аргумент-константный указатель на-что?
Непонятно логическое построение функции.Мы получаем указатель на номер элемента массива?

C++
1
2
3
4
void print(const vector<People>& p)
{
     for_each(p.begin(), p.end(), Print());
}
Не могли бы вы объяснить,что в данном случае является аргументами функции и что такое for_each?
Это похоже на цикл (for_each) и на что-то простое/стандартное,но я этого почему-то не знаю,и гугл знает только foreach.
Тоже самое и с push_back.Я неверное не умею пользоваться поисковиками.

Учусь самостоятельно,по 2-м книгам:c++ для чайников и по Страуструпу.В обоих случаях синтаксис языка резко отличается от вашего,поэтому наверное я ничего не понимаю.
Заранее спасибо.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.11.2011, 10:07     Определение элементов функции. #5
Цитата Сообщение от TaiBos
А каким образом это можно сделать?
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
31
32
#include <iostream>
#include <vector>
 
using namespace std;
 
struct x {
    int a, b;
};
 
void func(vector <struct x> v);
 
int main()
{
    vector <struct x> v;
    struct x tmp = { 1, 2 };
    
    v.push_back(tmp);
    v.push_back(tmp);
    v.push_back(tmp);
    
    func(v);
    
    return 0;
}
 
void func(vector <struct x> v)
{
    int size = v.size();
    
    for (int i = 0; i < size; i++)
        cout << v[i].a << " " << v[i].b << endl;
}
Код
[guest@localhost tests]$ .iso++ t.cpp -o t
[guest@localhost tests]$ ./t
1 2
1 2
1 2
[guest@localhost tests]$
TaiBos
0 / 0 / 0
Регистрация: 13.11.2011
Сообщений: 14
14.11.2011, 17:12  [ТС]     Определение элементов функции. #6
Пожалуй,мне нужен другой учебник.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2011, 17:24     Определение элементов функции.
Еще ссылки по теме:

C++ Многократное определение функции
C++ Определение функции length3
Определение размера массива в функции C++

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
14.11.2011, 17:24     Определение элементов функции. #7
TaiBos,
C++
1
class Print: public unary_function<People, void>
Наследуемся от std::unary_function<T, Result>. В данном случае тип T - People, Result - void.

http://cplusplus.com/reference/std/f...nary_function/

C++
1
2
3
4
   void operator()(const People& s)
        {
                cout << s.Name << " " << s.Name2 << "\n";
        }
Оператор вызова функции или как его еще называют оператор круглые скобки, который принимает в себя const ссылку на объект класса People и выводит в cout данные.

C++
1
2
3
4
void print(const vector<People>& p)
{
     for_each(p.begin(), p.end(), Print());
}
for_each - стандартный алгоритм. Проходит по каждому элементу контейнера и применяет к нему функцию переданную в третьем аргументе. В данном случае используем функтор Print. Т.е. туда мы передаем созданный объект класса, а внутри вызывается оператор () для каждого элемента коллекции.

http://cplusplus.com/search.do?q=for_each

vector:ush_back - http://cplusplus.com/reference/stl/vector/push_back/

Добавлено через 2 минуты
Но мне больше нравится такой вариант исполнения сего кода.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
struct People
{
    std::string name;
    std::string surname;
};
 
int main()
{
    std::vector<People> vec = 
    {
        People{"1", "2"},
        People{"3", "4"},
        People{"5", "6"}
     };
     std::for_each(vec.begin(),vec.end(), [](const People& p) {std::cout << p.name << ' ' << p.surname << std::endl;});
}
Yandex
Объявления
14.11.2011, 17:24     Определение элементов функции.
Ответ Создать тему
Опции темы

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