Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Linker Error] Unresolved external, ошибка компилятора 
V
    Опции темы
Нитонисе
Дата 7.11.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Что-то не могу справиться с этой ошибкой компилятора. Кому не трудно - посмотрите где тут спряталась ошибка.
Проектирую семейство классов, вот заголовочный файл.
Код

#ifndef LoadH
#define LoadH

class Load
{
  public:
    Load(float v);
    float getValue();
    virtual void func()=0;

  protected:
    float value;
};

class LinearLoad : public Load
{
  public:
    LinearLoad(float v);
    void func(){};
};

class PartLinearLoad : public Load
{
  public:
    PartLinearLoad(float v, float x, float s);
    void func(){};
    float getX();
    float getS();

  protected:
    float x;
    float s;
};

class DotLoad : public Load
{
  public:
    DotLoad(float v, float x);
    void func(){};
    float getX();
    float getS();

  protected:
    float x;
};

#endif

А это файл реализации
Код

#pragma hdrstop
#include "Load.h"
#pragma package(smart_init)

///////////////////////////////////////////////////////////////////////////////////////////////////
// Load /////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
Load::Load(float v)
{
  this->value = v;
}
//-------------------------------------------------------------------------------------------------
float Load::getValue()
{
  return value;
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// LinearLoad ///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
LinearLoad::LinearLoad(float v) : Load(v)
{

}

///////////////////////////////////////////////////////////////////////////////////////////////////
// PartLinearLoad ///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
PartLinearLoad::PartLinearLoad(float v, float x, float s) : Load(v)
{
  this->x = x;
  this->s = s;
}
//-------------------------------------------------------------------------------------------------
float PartLinearLoad::getX()
{
  return x;
}
//-------------------------------------------------------------------------------------------------
float PartLinearLoad::getS()
{
  return s;
}

///////////////////////////////////////////////////////////////////////////////////////////////////
// DotLoad //////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////
DotLoad::DotLoad(float v, float x) : Load(v)
{
  this->x = x;
}
//-------------------------------------------------------------------------------------------------
float DotLoad::getX()
{
  return x;
}

Вот код, который использует спроектированное семейство классов
Код

#include "Load.h"
void __fastcall TfMain::Button1Click(TObject *Sender)
{
  std::vector<Load*> loads;
  Load *ll = new LinearLoad(2);
  Load *pll = new PartLinearLoad(3,1,1);
  Load *dl = new DotLoad(1,3);
  loads.push_back(ll);
  loads.push_back(pll);
  loads.push_back(dl);
}

А вот это ошибки компилятора
Код

[Linker Error] Unresolved external 'LinearLoad::LinearLoad(float)' referenced from E:\...\MAIN.OBJ
[Linker Error] Unresolved external 'PartLinearLoad::PartLinearLoad(float, float, float)' referenced from E:\...\MAIN.OBJ
[Linker Error] Unresolved external 'DotLoad::DotLoad(float, float)' referenced from E:\...\MAIN.OBJ


Добавлено через 10 минут и 32 секунды
Проблема решилась добавлением в проект файла Load.h, но только через функцию в билдере "Добавить в проект". Но ведь я итак в файле реализации прописал include "Load.h", почему не работало?
PM MAIL   Вверх
mes
Дата 7.11.2010, 14:07 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Нитонисе @  7.11.2010,  11:32 Найти цитируемый пост)
в проект файла Load.h

может Load.cpp ? 


--------------------
PM MAIL WWW   Вверх
Нитонисе
Дата 7.11.2010, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(mes @  7.11.2010,  14:07 Найти цитируемый пост)
может Load.cpp ? 

Ну да, ошибся. А почему недостаточно включения Load.h? Заголовочный файл не знает где его реализация? Да и что-то не пойму где прописано, что добавлен файл Load.cpp. 
PM MAIL   Вверх
mes
Дата 7.11.2010, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



потому что каждый .cpp файл компилиться отдельно, и потом все собирается в один образ.. хидеры же непосредственно компиляции не подвергаются.. лишь косвенно через включение в .cpp файл..
поэтому в ИДЕ  наличие хидеров в проекте лишь для вашего удобства, а наличие .цпп важно для компиляции и сборки..

Добавлено через 1 минуту и 49 секунд
Цитата(Нитонисе @  7.11.2010,  13:13 Найти цитируемый пост)
Заголовочный файл не знает где его реализация? 

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

Добавлено через 4 минуты и 21 секунду
Цитата(Нитонисе @  7.11.2010,  13:13 Найти цитируемый пост)
Да и что-то не пойму где прописано, что добавлен файл Load.cpp.  

в проекте (а точнее в make_файле, который иде делает автоматически на основе списка файлов проекта)

Добавлено через 5 минут и 33 секунды
при условии что билдер придерживается общепринятых правил smile


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




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


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

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