2013-12-06 5 views
0

Я хочу использовать объект класса C, в классе D.как использовать класс другой каталог

Дерево каталогов программы аналогична:

directory1/directory2/main.cc 
directory1/directory2/classC.cc 
directory1/directory2/classC.h 
directory1/directory3/classD.cc 
directory1/directory3/classD.h 

Я включил заголовок в classD.h с абсолютным путем classC, но если я пытаюсь запустить я получаю эту ошибку:

Undefined reference to nm1::ClassC::ClassC() 

в ClassD я называю объект таким образом: nm1::ClassC * obj = new ClassC(); Я добавил в wscript правильные заголовки с правильными дорожками.

ClassC составляют часть пространства имен nm1, ClassD составляют часть пространств имен nm1::nm2.

Как я могу это сделать?

+0

Неопределенная ссылка означает, что вы не компилируете все файлы или не связываете их правильно. –

+0

ClassD является ConsumerWindow и есть: '#include "consumerwindow.h" #include "../mySimulations/Logger.h" // правильный путь имен ns3 {имен NDN { аннулируются ConsumerWindow :: OnData() { ns3 :: Logger * logger = new Logger(); }}} ' ClassC является Logger и есть: ' #include "logger.h" имен ns3 { Logger :: Logger() {}} ' – user2369478

ответ

0

Проблема здесь состоит в том, что каждый .cc файл скомпилирован отдельно. Во время компиляции они сообщаются заголовками there is a function/class/constructor called x, но не являются деталями реализации этой функции/класса, поскольку это находится в файле .cc, который был скомпилирован отдельно.

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

Ваши заголовки в порядке. Я не могу сказать, как правильно соединить ссылку, потому что я не знаю, какой компилятор/компоновщик вы используете. Но посмотрите, как добавить пути компоновщика к вашей команде связи. Также убедитесь, что вы компилируете каждый файл и каждый компилятор производит какой-то вывод объекта, а затем проверяйте, что его потребляет.

+0

Но если я поместил файлы ClassC в тот же каталог ClassD, может быть то же самое? – user2369478

+0

При условии, что все, что создает вашу библиотеку или двоичный файл, включает этот объект в свой список объектов для ссылки. Структура каталогов не имеет значения, пока список всех объектных файлов указан – Salgar

+0

Я скомпилировал каждый файл, у меня есть .o каждого файла. – user2369478

0

пытаются использовать

#include<file path> 

или

#include"file path" 

, где путь к файлу полный путь к файлу с C: .... если вы используете окна

+1

Он имеет проблему компоновщика, не проблема компиляции – Salgar

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