использование своих функций, Error C2601

Тема в разделе "MS Visual C++", создана пользователем Lusika, 31 июл 2006.

Статус темы:
Закрыта.
  1. Lusika

    Lusika Гость

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

    Может я не туда прототипы сую?
    У меня проект создан через MFC AppWizard; соответственно файлы myproj.cpp myproj.h myprojDlg.cpp myprojDlg.h
    я прототипы в myprojDlg.h ставлю:
    Код (Text):
    int dayInMonth(int numb_month, int year);
    bool checkvisokos(int god);
    вот сам пример исользования функций:
    Код (Text):
    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;}
    .......
    }
     
  2. Lusika

    Lusika Гость

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

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

    SunSanych Well-Known Member

    Регистрация:
    28 июн 2006
    Сообщения:
    71
    Симпатии:
    0
    Линковщик говорит, что Вы пытаетесь вызвать функцию класса CMyprojDlg с именем dayInMonth и тремя переменными имеющие тип int, int, bool. А такой функции нет.
    И он прав. Так как, если Вы ничего не меняли, то Ваши функции не принадлежат классу CMyprojDlg, а являются глобальными, а функция dayInMonth имеет только два параметра с типом int.
    Скорее всего Вы просто передали в функцию лишнюю переменную. Проверьте еще раз по-внимательнее.
    Или, вариант, что вы эти две функции определили в теле класса CMyprojDlg (из листинга это не понятно), тогда их надо или вынести от туда или их реализацию начинать так
    intCMyprojDlg::dayInMonth
    и
    bool CMyprojDlg::checkvisokos
    но тогда их нельзя будет использовать в других классах.
    Удачи.
     
  4. Lusika

    Lusika Гость

    Спасиб, разобралась, у меня прототипы всё же были не там.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей