2014-02-21 5 views
1

Извините, если этот вопрос может быть задан раньше, но я не смог найти правильный ответ. Я пытаюсь использовать свой собственный файл класса внутри другого класса, который уже был написан разными людьми. Вся программа основана на Omnet ++. Перед сборкой все, кажется, хорошо, но как только я построю программа дает мне ошибкуКласс не связан должным образом

undefined reference to `RatePrediction::RatePrediction(double, double, double) 

Я пытаюсь использовать RatePrediction в CentralEntity и это то, что я сделал:

В RatePrediction .cc:

#include "CentralEntity.h" 
RatePrediction::RatePrediction(double gs,double gi, double dataRate): 
      gs(gs), gi_int(gi), reqDataRate(dataRate), result(0), error(0){ 
    //some codes 
} 

В CentralEntity.h:

#include "RatePrediction.h" 
class CentralEntity : public cAsyncModule 
{ 
//friend classes .... 
protected: 
    virtual void initialize(); 
} 

В Сеп tralEntity.cc:

#include "RatePrediction.h" 

void CentralEntity::initialize() 
{ 
RatePrediction RateObj(1.1e-13,1.2-13,1e4); 
} 

EDIT:

@hildensia Спасибо за ваш комментарий. Я действительно сделал это, и теперь он работает. Но я не уверен, может ли он быть надежным и стабильным или нет.

Я редактировал Makefile вручную, и я добавил:

OBJS= RatePrediction.o 

RatePrediction.o: RatePrediction.cc 
    $(CXX) -c $(COPTS) RatePrediction.cc 
+0

Is RatePrediction.cc скомпилирован в объектный файл и связан с целевым исполняемым файлом? Включен ли он в сборку? – eci

+0

Можете ли вы показать, как вы скомпилируете программу? Проблема может заключаться в том, что вы пропустите ссылку на RatePrediction.o (я должен был замедлить ...) – hildensia

+0

@hildensia Я использую Eclipse (компилятор GCC C++). о RatePrediction.o вы правы. файл не существует рядом с другими файлами * .o – Shahab

ответ

1

Проблема заключается в компиляции. RatePrediction.cc, похоже, совсем не скомпилирован. Таким образом, компоновщик не может найти конструктор, потому что с ним нет объектного файла. Ваше решение в Makefile, по-видимому, сейчас подходит, но, вероятно, будет перезаписано вашей системой сборки. Поэтому вы должны собрать информацию о том, как вы можете определить, какие файлы должны быть созданы Eclipse.

+0

Это правильный ответ, но дополнительная информация: Если вы используете IDE OMNeT ++, тогда графический интерфейс автоматически генерирует правильный make-файл для каждой сборки. Вам просто нужно поместить ваш файл .cc в любую из исходных папок и построить проект. Если вы вызываете процесс сборки из командной строки, вам всегда нужно вызвать opp_makemake (с соответствующими аргументами) в корневой каталог исходного кода. Это команда, которая создает правильный make-файл против вас и собирает новые .cc-файлы. (Повторное создание make-файла необходимо, только если вы добавили новые .cc/.h файлы или каталоги) – Rudi

0

Вы должны определить функцию строительства класса RatePrediction в RatePrediction.h файле. , и может быть лучше добавить такие строки «#ifndef * _H #define * _H #endif" в каждом * .h файле.

+0

Спасибо, но я уже сделал это – Shahab

Смежные вопросы