2013-07-26 4 views
-1

Я создал ++ класс C называется Синей и функция внутри этого класса под названием void drawblueline() Я новичок в программирование, но думал, что я бы назвал это в моей командной строке, написавLinker ошибка при вызове функции C++

int main() 
{ 

Blue blue; 
blue.drawblueline(); 
} 

I 'Получая две ошибки линкера на blue.draw.., если нет ничего плохого в том, как я его назвал, возможно, ошибка в функции?

+0

забыли '# includes' ?? –

+0

[См. Этот вопрос.] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external-symbol-error-and-how-do-i-fix) – chris

+2

@ GrijeshChauhan: Отсутствующие '# include' не вызывают ошибок компоновщика. –

ответ

1

Если вы реализуете методы класса в файле somefile.cpp, а ваша программа находится в файле otherfile.cpp, вам необходимо скомпилировать ее на g++ somefile.cpp otherfile.cpp ....

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

Лучший способ скомпилировать более сложные проекты - через Makefile.

Пример Makefile:

all: main 

main: main.cpp blue.o 
    g++ main.cpp blue.o -o main 

blue.o: blue.cpp blue.h 
    g++ blue.cpp -c -o blue.o 

Затем вы можете скомпилировать проект по команде make

Это Makefile говорит, что ваши проекты нужны основной, основной зависит от main.cpp и blue.o. Так что если main.cpp или blue.o не является фактическим, он попытается сделать оба из них, а затем main, командой g++ main.cpp blue.o -o main.

Затем, blue.o зависит от blue.cpp и blue.h. Синий будет скомпилирован для объектного файла blue.o.

+0

Спасибо за помощь! Я использую XCode. вы бы не знали о компиляции в этой среде? думал, что он сделал это для вас:/ –

+0

@AndreaF, насколько я знаю в этой среде, вам нужно добавить все исходные файлы в проект. Убедитесь, что все исходные файлы показаны в разделе «Скомпилировать источники». – Ari

1

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

Например, у вас есть два файла с именами First.cpp и Second.cpp и Main.cpp. Сначала вы должны скомпилировать First.cpp, Second.cpp, затем Main.cpp. Теперь вам нужно связать их, чтобы разрешить все ссылки.

Если вы используете Ubuntu или подобные операционные системы на этой линии будет компилировать и ссылка одновременно

г ++ First.cpp Second.cpp main.cpp -o Bluerectangle

выше линии компилирует затем связывает все файлы и создает файл объекта с именем Bluerectangle.

Для запуска этого типа Bluerectangle в терминале.

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