Титла: Компилиране на програма? Публикувано от: plamen_t в Dec 12, 2006, 18:12 Значи проблемът е следният.
Имам например следния хедър a.h
Имплементацията се намира в a.cpp
Титла: Компилиране на програма? Публикувано от: astronom в Dec 12, 2006, 18:28 g++ -o a.o a.cpp
g++ -o main a.o main.cpp # Директно подаваш на линкера предварително компилирания обектен файл на класа. Можеш и Makefile да си направиш. Титла: Компилиране на програма? Публикувано от: dvasilev в Dec 12, 2006, 18:31 В твоя случай пробвай с g++ -o main main.cpp a.cpp
Титла: Компилиране на програма? Публикувано от: plamen_t в Dec 12, 2006, 18:59 @astronom
Като пробвам с g++ -o a.o a.cpp и линкера дава грешка
Btw как да си направя Makefile. @dvasilev 10х. Така работи. Титла: Компилиране на програма? Публикувано от: TheNightmare в Dec 12, 2006, 21:36 За най-лесно си сложи някоя среда от рода на Anjuta, Code::Blocks или KDevelop
Титла: Компилиране на програма? Публикувано от: tseso в Dec 12, 2006, 23:57 #include "a.h"
A::A(int a) : x(a) {} int A::get() { return x; } x(a) трябва да е конструктура на базовия клас, а в случая "А" е основен. синтаксис на коструктор на производен клас: клас::клас(аргументи...) : базов клас (аргументи) { } Предложение: A::A(int a) { x=a; } int A::get() { return x; } Титла: Компилиране на програма? Публикувано от: plamen_t в Dec 13, 2006, 00:50 Конструкцията
В С++ основните типове като int ,char и т.н. могат да се разглеждата като обекти и съответно си имат конструктори. Също така
И тъй като x се явява като инстанция на класа int в класа А може да му извикаме конструктора в инициализиращия списък Всъщност това е и единствения начин да инициализираме константна член-данна в класа
Също така не е проблем да се използва int a(3) вместо int a=3 ![]() Титла: Компилиране на програма? Публикувано от: astronom в Dec 13, 2006, 10:15
Да, защото съм забравил да сложа едно -c, за да компилира само без да линква т.е.:
Но виждам, че dvasilev вече ти е дали алтернативен отговор. Препоръчвам ти да се позапознаеш с възможностите на командите, които ползваш преди да почнеш да ги ползваш - man gcc
Ами лесно. Ето ти един бърз пример за Makefile:
Забележка: Преди $(CXX) трябва да има табулация! Задължително! Записваш го като Makefile във каталога със изходния код и след това пишеш
или
Програмата ти ще се бъде изградена от една единствена команда. Повече информация относно GNU make можеш да намериш на офциалната страница. Титла: Компилиране на програма? Публикувано от: astronom в Dec 13, 2006, 10:18
Една такава среда повече ще го обърка като начинаещ отколкото да му помогне. А и не си заслужава за 30 реда код автоматизирано да генерираш Makefiles и configure - по добре да схванеш нещо. Титла: Компилиране на програма? Публикувано от: plamen_t в Dec 19, 2006, 16:55 Значи разбрах главната идея на make. Само че имам един проблем.
Хедърите на класовете се намират в /usr/local/project/includes, а самата имплементация на тези класове е в /usr/local/project/src. Броят на класовете е сравнително голям и освен това е изградена сложна йерархия на наследяване и затова ми е доста трудно да видя кои точно имплементации ми трябват и да компилирам само тях. Като тръгна да компилирам някоя програма, която използва класовете от /usr/local/project, добавям в makefile-a IPATHS=/usr/local/project/includes. Компилацията е успешна, но когато се пусне линкера и дава постоянно undefined reference към всяка функция, която е от тези класове. Та как мога да го накарам да види на кой хедър, коя имплементация съответства. Нещо подобно на qmake при Qt. qmake автоматично сканира указаните директории и намира на всеки хедър имплементацията и по този начин много лесно се разбива един клас на 2 файла - декларация и дефиниция. |