Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > использование своих функций, error C2601


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

Может я не туда прототипы сую?
У меня проект создан через 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;}

.......
}

 

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

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  

Автор: Stesh_ka 31.7.2006, 14:06
т.е не в заголовочном файле? а в CMyprojDlg.cpp ? у меня они в MyprojDlg.h, в описании класа CMyprojDlg

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

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

Автор: vinter 31.7.2006, 15:03
Цитата

у меня они в 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;}     
}        
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)