Поиск:

Ответ в темуСоздание новой темы Создание опроса
> использование своих функций, error C2601, в чём ошибка? Как правильно надо делать? 
:(
    Опции темы
Stesh_ka
Дата 31.7.2006, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Подскажите пожалуйста. У меня есть пара функций, есть для них прототипы, а компилер говорит, что неправильное определение функций, я сомтрела в мсдн по коду ошибки, но не разобралась.

Может я не туда прототипы сую?
У меня проект создан через MFC AppWizard; соответственно файлы  myproj.cpp myproj.h myprojDlg.cpp myprojDlg.h
 я прототипы в myprojDlg.h ставлю:
Код

int  dayInMonth(int numb_month, int year);
bool  checkvisokos(int god);


вот сам пример исользования функций:
Код

void CMyprojDlg::OnOK() 
{
UpdateData (TRUE);

int  dayInMonth(int numb_month, int year)
{    int dIm;
  switch(numb_month)
  { 
  case '1':{dIm=31; ;break; }
  case '2':{ if !(checkvisokos(year)) {dIm=28;}else {dIm=29;} break;}
  case '3':{dIm=31; break;}
  case '4':{dIm=30; break;}
  case '5':{dIm=31; break;}
  case '6':{dIm=30; break;}
  case '7':{dIm=31; break;}
  case '8':{dIm=31; break;}
  case '9':{dIm=30; break;}
  case '10':{dIm=31;break;}
  case '11':{dIm=30;break;}
  case '12':{dIm=31;break;}
  
  }
  return dIm;
 } 

bool  checkvisokos(int god)
{
if ( div(god,4).rem ==0) {return true;}else {return false;}
}
... 
int nM = currt.GetMonth(); 
int nY = currt.GetYear();
int dify=nY-dry;
int difm=nM-drm;
int difd=nD-drd;
...

if (difd <0){int res= dayInMonth(nM,nY);difm=difm-1;difd=difd+res;}

.......
}

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


Explorer
****


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

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



Ты не используешь ,ты пытаешься определить функцию в теле другой ф-ии. Функции должны быть определены вне других ф-ий, а потом их можно использовать в других ф-иях..
Код

void CMyprojDlg::OnOK()    
{    
  UpdateData (TRUE);    
  dayInMonth(...);
  checkvisokos(...);
  int nM = currt.GetMonth();    
  int nY = currt.GetYear();    
  int dify=nY-dry;    
  int difm=nM-drm;    
  int difd=nD-drd;    
  ...    
if (difd <0)
{
  int res= dayInMonth(nM,nY); 
  difm=difm-1;
  difd=difd+res;    
.......    
}
int  dayInMonth(int numb_month, int year)    
{  
   int dIm;    
  switch(numb_month)    
  {    
  case '1':{dIm=31; ;break; }    
  case '2':{ if !(checkvisokos(year)) {dIm=28;}else {dIm=29;} break;}    
  case '3':{dIm=31; break;}    
  case '4':{dIm=30; break;}    
  case '5':{dIm=31; break;}    
  case '6':{dIm=30; break;}    
  case '7':{dIm=31; break;}    
  case '8':{dIm=31; break;}    
  case '9':{dIm=30; break;}    
  case '10':{dIm=31;break;}    
  case '11':{dIm=30;break;}    
  case '12':{dIm=31;break;}    
    
  }    
  return dIm;    
 }    
bool  checkvisokos(int god)    
{    
if ( div(god,4).rem ==0) {return true;}else {return false;}    
}        

А еще посмотри где у тебя прототипы ф-ий..они должны быть в теле класса CMyprojDlg  

Это сообщение отредактировал(а) vinter - 31.7.2006, 11:30


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


Новичок



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

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



т.е не в заголовочном файле? а в CMyprojDlg.cpp ? у меня они в MyprojDlg.h, в описании класа CMyprojDlg

Я перенесла те функции. всё скомпилилось, но теперь линковщик ругается smile
ну вот...перенесла функции...закомпилилось, но теперь линковщик ругается:
 error LNK2001: unresolved external symbol "public: int __thiscall CMyprojDlg::dayInMonth(int,int,bool)" (?dayInMonth@CMyprojDlg@@QAEHHH_N@Z)

и на вторую функцию тоже :-(  

Это сообщение отредактировал(а) Stesh_ka - 31.7.2006, 14:10
PM MAIL   Вверх
vinter
Дата 31.7.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


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

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



Цитата

у меня они в MyprojDlg.h, в описании класа CMyprojDlg

Все правильно...
При определении ф-ии надо указывать какому классу эта ф-ия принадлежит
Код

void CMyprojDlg::OnOK()     
{     
  UpdateData (TRUE);     
  dayInMonth(...);    
  checkvisokos(...);    
  int nM = currt.GetMonth();     
  int nY = currt.GetYear();     
  int dify=nY-dry;     
  int difm=nM-drm;     
  int difd=nD-drd;     
  ...     
if (difd <0)    
{    
  int res= dayInMonth(nM,nY);    
  difm=difm-1;    
  difd=difd+res;     
.......     
}    
int  CMyprojDlg::dayInMonth(int numb_month, int year) //Была ошибка    
{    
   int dIm;     
  switch(numb_month)     
  {     
  case '1':{dIm=31; ;break; }     
  case '2':{ if !(checkvisokos(year)) {dIm=28;}else {dIm=29;} break;}     
  case '3':{dIm=31; break;}     
  case '4':{dIm=30; break;}     
  case '5':{dIm=31; break;}     
  case '6':{dIm=30; break;}     
  case '7':{dIm=31; break;}     
  case '8':{dIm=31; break;}     
  case '9':{dIm=30; break;}     
  case '10':{dIm=31;break;}     
  case '11':{dIm=30;break;}     
  case '12':{dIm=31;break;}     
     
  }     
  return dIm;     
 }     
bool CMyprojDlg:: checkvisokos(int god) //Была ошибка    
{     
if ( div(god,4).rem ==0) {return true;}else {return false;}     
}        
 

Это сообщение отредактировал(а) vinter - 31.7.2006, 15:06


--------------------
Мой блог
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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