Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Описание класса

315
12 июля 2004 года
Nick_M
399 / / 29.05.2003
Проблема в следующем. Есть проект. Главная форма - 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"
2.0K
12 июля 2004 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by Nick_M
Проблема в следующем. Есть проект. Главная форма - 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).

315
12 июля 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Fazil6


Проблема в том, что publ.cpp не скомпилирован. Включи этот файл в проект (Shift+F11).


В том то и дело, что включал! И не publ.cpp, а publ.h

2.0K
12 июля 2004 года
Fazil6
126 / / 17.12.2003
Цитата:
Originally posted by Nick_M

В том то и дело, что включал! И не publ.cpp, а publ.h



#include "publ.h" - всключает описание класса в текст файла.

При компиляции проекта компилируются только файлы, входящие в этот проект (было бы странно, если бы компилировались другие)! Судя по всему в проект файл "publ.cpp" не входит, т.к. #include "publ.h" это не означает и поэтому он не компилируется.
Так что объявление функции

int doit(int in)

есть, а реализацию забыли откомпилировать и ее нет, о чем линкер и говорит. Я же написал Shift+F11 - publ.cpp - Open

315
12 июля 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Fazil6

Я же написал Shift+F11 - publ.cpp - Open


А я что делал? Включал по Shift+F11 и publ.h и publ.cpp пробовал.

3
12 июля 2004 года
Green
4.8K / / 20.01.2000
Пробдема в том, что ты объявил метод temp::doit, но не реализовал его. Вместо этого ты реализовал функцию doit, не являющуюся членом класса.
Для того, чтобы исправить ошибку надо сделать либо так:

Код:
// publ.h

class temp
{
public:
  int doit(int in)
  {
    in = in;
    return in++;
  }
};


Либо так:
 
Код:
// publ.h

class temp
{
public:
  int doit(int in);
};

 
Код:
// publ.cpp

int temp::doit(int in)
{
  in = in;
  return in++;
}


Несколько замечаний:
1) после определения метода ставить т очку с запятой необязательно;
2) имена классам лучше задавать начиная с 'C' и заглавных букв (CTemp);
3) для чего нужна бессмысленная операция in = in ?
315
12 июля 2004 года
Nick_M
399 / / 29.05.2003
Цитата:
Originally posted by Green
Несколько замечаний:
1) после определения метода ставить т очку с запятой необязательно;
2) имена классам лучше задавать начиная с 'C' и заглавных букв (CTemp);
3) для чего нужна бессмысленная операция in = in ?


Спасибо. Теперь все работает :). А по поводу бессмысленной операции - очепятка.

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог