Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > передать вектор структур в функцию |
Автор: GroundZero 21.8.2009, 22:32 | ||
Вот задался целью передать в функцию вектор структур, или хотябы указатель на него, чтобы производить над ним разлиные операции
после всех наманипуляций (resize) в функции end_of_str_inpfile размер вектора всеравно остается равен 10и может я чего-то доконца не понимаю? |
Автор: mes 21.8.2009, 22:39 |
передавайте по ссылке/указателю: vector<input_struct>& input_struct_of_file, Добавлено через 1 минуту и 56 секунд ну а здесь можно и по значению |
Автор: GroundZero 21.8.2009, 22:52 |
вот не могу понять тогда разницу void func(int * a) и void func(int & a) если функции отдают? (int * a) то проиходит передача переменной с адресом? а (int & a) самого значения адреса? или я уже сам себя запутал? |
Автор: GroundZero 22.8.2009, 09:32 |
а в самом вызове функции получается что мы ссылку передаем (input_struct_of_file)? end_of_str_inpfile(input_struct_of_file, &string_counter); почему тогда input_struct_of_file без &??? если считать что при объявлении vector<input_struct> input_struct_of_file(10); input_struct_of_file-является ссылкой на первый элемент то при передаче структуры в функцию(то есть ссылки) почему не работает void end_of_str_inpfile(vector<input_struct> *input_struct_of_file, int *string_counter) он же ждет тут указатель на вектор |
Автор: mes 22.8.2009, 11:05 | ||||||||||
Посмотрите внимательно в примерах выше и сравните с тем что написали.
это Вы грубо говоря по аналогии с массивом ? Нет, vector "ведет себя" как обычная переменная.
будет работать, но надо передавать тогда не вектор, а указатель на вектор.
то же самое для ссылки :
|
Автор: GroundZero 22.8.2009, 18:57 |
Спасибо большое... |
Автор: GroundZero 22.8.2009, 19:15 | ||
Люди подсказали и решил сделать подругому
тока при компиляции получаю ошибку не могу понять как правильно обратиться в Элементу "ats" структуры |
Автор: mes 22.8.2009, 20:18 | ||||||
input_struct_of_file у Вас указатель, соответсвенно Вы прежде, чем вызвать оператор[] должные указатель разименовать или обращаться к этому оператору напрямую :
в общем из за своего нежелания почитать о том, что представляет из себя ссылка и разобраться с этим, ищите себе неудобный синтаксис. вот как выглядило бы пи передаче параметров по ссылке :
|
Автор: ller 22.8.2009, 21:10 |
Так создать себе трудностей, а потом героически их преодолеть ![]() |
Автор: andrew_121 22.8.2009, 21:53 |
![]() |
Автор: GroundZero 23.8.2009, 10:17 | ||||
выбор был сделан из соображений, как все... Младший Брат показал всякие Сишные движки и там везде функция определяется так
А сам говорит что синтаксис
не встечал в нормальных программах... Правда есть одно НО, он пишет только на C#, а не на с++ вобщем последовал я его примеру |
Автор: mes 23.8.2009, 10:52 | ||||
Т.е пишете на C++ как все на С ?! круто ! тогда и vector не используйте, в С его никто не использует (за неимением такого) ![]()
Понятно практически все программы на C++ не нормальные.. ![]() Следуя вашей логике, если бы Вы были водителем автобуса, а брат троллейбуса, то заправлять свой транспорт не стали бы, так как брат сказал, что у нормального транспорта нет бензобака. ![]() |
Автор: andrew_121 23.8.2009, 11:54 | ||||||
Срочно учу C#! Потому как хочу писать нормальные программы на нормальном языке ![]() |
Автор: bsa 24.8.2009, 11:30 |
GroundZero, пожалуйста, используй современное именование стандартных заголовочных файлов принятое в С++: #include <stdlib.h> -> #include <cstdlib> #include <string.h> -> #include <cstring> (для strcpy, strcmp и пр.) и/или #include <string> (для класса std::string) #include <stdio.h> -> #include <cstdio> И по возможности постарайся не смешивать языки Си и С++. Например, cstdio и cstring тебе вряд ли понадобятся при разработке программ на С++. Кстати, ссылка - очень удобная фича С++. Поэтому отказываются от нее только там, где это действительно необходимо. Но это не твой случай. |