Описание класса
class temp
{
public:
int doit(int i);
private:
};
int doit(int in)
{
in = in;
return in++;
};
На форме - кнопка. Событие:
void __fastcall TMainF::BitBtn1Click(TObject *Sender)
{
temp *tmp;
Label1->Caption = tmp->doit(2);
}
Вызывает ошибку: Unresolved external 'temp::doit(int)' referenced from d:\main.obj
В чем проблема? В Project Manager файл publ.h есть. Прописал #include "publ.h"
Проблема в следующем. Есть проект. Главная форма - main.cpp, main.h. Есть файл publ.h содержащий описание класса.
class temp
{
public:
int doit(int i);
private:
};
int doit(int in)
{
in = in;
return in++;
};
На форме - кнопка. Событие:
void __fastcall TMainF::BitBtn1Click(TObject *Sender)
{
temp *tmp;
Label1->Caption = tmp->doit(2);
}
Вызывает ошибку: Unresolved external 'temp::doit(int)' referenced from d:\main.obj
В чем проблема? В Project Manager файл publ.h есть. Прописал #include "publ.h"
Проблема в том, что publ.cpp не скомпилирован. Включи этот файл в проект (Shift+F11).
Проблема в том, что publ.cpp не скомпилирован. Включи этот файл в проект (Shift+F11).
В том то и дело, что включал! И не publ.cpp, а publ.h
В том то и дело, что включал! И не publ.cpp, а publ.h
#include "publ.h" - всключает описание класса в текст файла.
При компиляции проекта компилируются только файлы, входящие в этот проект (было бы странно, если бы компилировались другие)! Судя по всему в проект файл "publ.cpp" не входит, т.к. #include "publ.h" это не означает и поэтому он не компилируется.
Так что объявление функции
int doit(int in)
есть, а реализацию забыли откомпилировать и ее нет, о чем линкер и говорит. Я же написал Shift+F11 - publ.cpp - Open
Я же написал Shift+F11 - publ.cpp - Open
А я что делал? Включал по Shift+F11 и publ.h и publ.cpp пробовал.
Для того, чтобы исправить ошибку надо сделать либо так:
class temp
{
public:
int doit(int in)
{
in = in;
return in++;
}
};
Либо так:
class temp
{
public:
int doit(int in);
};
int temp::doit(int in)
{
in = in;
return in++;
}
Несколько замечаний:
1) после определения метода ставить т очку с запятой необязательно;
2) имена классам лучше задавать начиная с 'C' и заглавных букв (CTemp);
3) для чего нужна бессмысленная операция in = in ?
Несколько замечаний:
1) после определения метода ставить т очку с запятой необязательно;
2) имена классам лучше задавать начиная с 'C' и заглавных букв (CTemp);
3) для чего нужна бессмысленная операция in = in ?
Спасибо. Теперь все работает :). А по поводу бессмысленной операции - очепятка.