Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Можно ли передать у функцию структуру, как параметр? 
V
    Опции темы
Sergio
Дата 23.4.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Зраствуйте. Хочу передать структуру как параметр у функцию. Не нашёл инфи по этому. Где нужно определать поля структуры? Вот пример функции:
Код

void AddToList(struct contact) {
                  // <<<Что делать дальше ?? Ведб поля структуры не известны
 }

Зарание спасибо.
PM MAIL ICQ   Вверх
Daevaorn
Дата 23.4.2007, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Структуру надо вначале определить, а уже потом использовать. Например
Код

struct Foo
{
   int a;
};

PM MAIL WWW   Вверх
vinter
Дата 23.4.2007, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Код

typedef struct tpTEMP
{
         int x;
         int y;
}TEMP;
void AddToList(TEMP &tmp) 
{
          tmp.x = 10;
          tmp.y = 56;
                  
 }




--------------------
Мой блог
PM MAIL WWW   Вверх
Sergio
Дата 23.4.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

Репутация: 0
Всего: 1



Вот я определил структуру:
Код

 struct contact {
    char Message[512];
    char IP[20];
    char ComputerName[20];
    char NickName[10];
  };

vector<contact> list;

void AddToList(contact _contact) {


 for(int a=0;  a<list.size();  a++)
   {
     if(list.at(a).IP == _contact.IP)
      {
       list.push_back(_contact);
      }
   }
 }

Мне пишет ошибку в цикле:
[C++ Error] File1.cpp(134): E2015 Ambiguity between 'list' and '_STL::list<_Tp,_Alloc>'

Что это может быть?
PM MAIL ICQ   Вверх
Любитель
Дата 23.4.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



vinter, а зачем через типедеф? Его юзают в сях - чтобы ключевое слово struct лишний раз не писать, это понятно, но у тебя передача по ссылке => это плюсы.

Добавлено через 3 минуты и 16 секунд
Sergio, у тебя похоже стоит using namespace std. Возникает конфликт межу std::lsit и локальной переменной list. От юзинга неймспейса лучше отказаться (поиск по форуму объяснит почему), да и переменную можно назвать по другому smile

Ещё - в данном случае структуру лучше передавать по константной ссылке для избегания лишних копирований.


--------------------
PM MAIL ICQ Skype   Вверх
Daevaorn
Дата 23.4.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Sergio @  23.4.2007,  16:20 Найти цитируемый пост)
[C++ Error] File1.cpp(134): E2015 Ambiguity between 'list' and '_STL::list<_Tp,_Alloc>'

Конфлик имен. У тебя переменная list и стандартный класс list в одной области видимости. Изменяй название переменной или убирай using namespace std;
Цитата(vinter @  23.4.2007,  15:55 Найти цитируемый пост)
typedef struct tpTEMP{         int x;         int y;}TEMP;

У нас на работе пальцы ломают за такое в С++smile
PM MAIL WWW   Вверх
Любитель
Дата 23.4.2007, 15:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Daevaorn @  23.4.2007,  15:25 Найти цитируемый пост)
У нас на работе пальцы ломают за такое в С++

[offtop]
Прям ломают smile Ты где работаешь? Нескромный вопрос - у тебя сколько пальцев?
[/offtop]


--------------------
PM MAIL ICQ Skype   Вверх
EvgenZ
Дата 23.4.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 3.8.2006

Репутация: 1
Всего: 11



Цитата(Daevaorn @ 23.4.2007,  15:25)
typedef struct tpTEMP{         int x;         int y;}TEMP;

У нас на работе пальцы ломают за такое в С++smile[/QUOTE]
оффтопик
//видать большая текучка кадров у вас...  smile  smile 


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Любитель
Дата 23.4.2007, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(EvgenZ @  23.4.2007,  15:33 Найти цитируемый пост)
видать большая текучка кадров у вас... 

А может у них много мутантов работают? Каких-нибудь стопальцевых? Или регенерация очень развита: палец отломали - два выросло. Серкретное предприятие, блин  smile 


--------------------
PM MAIL ICQ Skype   Вверх
Daevaorn
Дата 23.4.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 51
Всего: 70



Цитата(Любитель @  23.4.2007,  16:33 Найти цитируемый пост)
Нескромный вопрос - у тебя сколько пальцев?

Я так код не пишуsmile
Цитата(EvgenZ @  23.4.2007,  16:33 Найти цитируемый пост)
видать большая текучка кадров у вас...  

нет. вовсе нет. отсеивают хорошо ещё при набореsmile
Цитата(Любитель @  23.4.2007,  16:35 Найти цитируемый пост)
Серкретное предприятие, блин 

Да. На территори режимного институтаsmile

Это сообщение отредактировал(а) Daevaorn - 23.4.2007, 18:42
PM MAIL WWW   Вверх
vinter
Дата 23.4.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

Репутация: 13
Всего: 56



Цитата(Daevaorn @  23.4.2007,  15:25 Найти цитируемый пост)
У нас на работе пальцы ломают за такое в С++


Цитата(Любитель @  23.4.2007,  15:20 Найти цитируемый пост)
vinter, а зачем через типедеф? Его юзают в сях - чтобы ключевое слово struct лишний раз не писать, это понятно, но у тебя передача по ссылке => это плюсы

старая привычка, структурами просто не пользуюсьsmile(больше не будуsmile)


--------------------
Мой блог
PM MAIL WWW   Вверх
Любитель
Дата 23.4.2007, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Цитата(Daevaorn @  23.4.2007,  16:18 Найти цитируемый пост)
Я так код не пишу

А вдруг случайно... Да и вообще - мож ещё за что-то тоже ломают пальцы там у вас. Я нисколько не сомневаюсь в твоём опыте программрования, но всё-таки секретный объект, спецрежим...

Добавлено через 1 минуту и 35 секунд
Цитата(vinter @  23.4.2007,  16:19 Найти цитируемый пост)
больше не буду

Да это ничего... Главно не иди работать в секретный объект, где работает Daevaorn  smile 


--------------------
PM MAIL ICQ Skype   Вверх
JackYF
Дата 23.4.2007, 19:18 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



<имхо>
а вообще объявлять переменную с именем list и при этом юзать вектор как-то не то...
все вышеотписавшиеся правы насчет "no_using_namespace", но и имена такие лучше не давай
</имхо>

Добавлено через 3 минуты и 21 секунду
Цитата(Любитель @  23.4.2007,  18:37 Найти цитируемый пост)
Главно не иди работать в секретный объект, где работает Daevaorn  smile

Почему же? Насчет пригрозить поломать пальцы за такой вот typedef'ы - +1. smile

А вообще - отжигаете, господа smile

Добавлено через 7 минут и 10 секунд
А, Любитель уже отписал насчет имен... невнимательно смотрел.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Любитель
Дата 23.4.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



JackYF, ну вот ты хочешь жить, ожидая, что за случайную глупость (не знаю, как у кого, у меня бывает, что машинально что-то напишешь - потом удивляешься, как такое мог написать...) лишишься (в очередной раз...) пальца? Я - нет. Как закончу универ - ни за что не пойду работать к 
Daevaornу.

ЗЫ Блин, надо закрывать тему... 


--------------------
PM MAIL ICQ Skype   Вверх
likehood
Дата 23.4.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



Странный код какой-то.
Вот здесь вот
Код

if(list.at(a).IP == _contact.IP)

по-идее должны сравниваться две строки. Тогда нужно использовать strcmp:
Код

if (!strcmp(list.at(a).IP, _contact.IP))

Кроме того, если это условие выполнится, то контакт будет занесен в вектор и когда мы дойдем до конца вектора,
будут сравниваться две одинаковых строки. Таким образом, мы получим вечный цикл. Чтобы этого не произошло, можно
сохранить исходный размер вектора во временной переменной.
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1331 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.