2013-12-09 3 views
0

Я пытаюсь скомпилировать простую программу, которая использует наследование, и я бег в это:Неопределенная ссылка на наследование, makefile проблема?

g++ -g -Wall -c q1Test.cpp 
g++ -g -Wall -c figure.cpp 
g++ -g -Wall -c rectangle.cpp 
g++ -g -Wall -c triangle.cpp 
g++ -g -Wall -o shapes q1Test.o figure.o rectangle.o triangle.o 
q1Test.o: In function `main': 
/home/aryner/school/fall2013/csc340/hw9/Q1/q1Test.cpp:11: undefined reference to `Figure::center()' 
/home/aryner/school/fall2013/csc340/hw9/Q1/q1Test.cpp:16: undefined reference to `Figure::center()' 
collect2: ld returned 1 exit status 
make: *** [shapes] Error 1 

Поиска этой ошибки приводит меня к мысли, у меня есть проблема с моей Makefile, но я полностью потерял, как к чему то проблема может быть. Я сравнил свой файл makefile с некоторыми, которые я нашел в Интернете, и я не понимаю, почему мой не должен работать. Вот Makefile я использую:

CC = g++ 
CFLAGS = -g -Wall 

default: shapes 

shapes: q1Test.o figure.o rectangle.o triangle.o 
     $(CC) $(CFLAGS) -o shapes q1Test.o figure.o rectangle.o triangle.o 

figure.o: figure.cpp figure.h 
     $(CC) $(CFLAGS) -c figure.cpp 

rectangle.o: rectangle.cpp rectangle.h 
     $(CC) $(CFLAGS) -c rectangle.cpp 

triangle.o: triangle.cpp triangle.h 
     $(CC) $(CFLAGS) -c triangle.cpp 

q1Test.o: q1Test.cpp figure.h rectangle.h triangle.h 
     $(CC) $(CFLAGS) -c q1Test.cpp 

clean: 
     $(RM) shapes *.o *~ 

Я не хочу, чтобы получить возможность отправлять исходные файлы, потому что это домашнее задание, но я дам краткое описание. Рисунок представляет собой суперкласс для прямоугольника и треугольника. Прямоугольник и треугольник должны наследовать центр() от рисунка. q1Test - это тестовая программа, которая проверяет все функции в треугольнике и прямоугольнике, центр - единственная проверенная функция, которая унаследована от фигуры и не перегружена.

+0

Для быстрой проверки попробуйте переместить 'q1Test.o' после' figure.o' в свои правила 'forms:'. – slugonamission

+0

Кроме того, проверка работоспособности (хотя нарушение этого приведет к еще одному предупреждению ...), 'center()' * does * имеет реализацию в 'Figure', не так ли? – slugonamission

ответ

1

Два наиболее вероятных случая - это то, что вы забыли указать Figure::center() в исходном файле или что вы случайно забыли их квалифицировать как Figure::, так что вы остаетесь с глобальными center функциями, которые не входят в класс.

+0

Я чувствую себя идиотом. Я забыл сделать рисунок :: при реализации центра(). Я думаю, что я только видел, что люди, которые получают эту ошибку от ошибок в своих файлах, и я застрял, глядя на это. Спасибо. – akee

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