Создать и использовать заголовок в C ++ - PullRequest
1 голос
/ 03 апреля 2011

У меня есть три файла: add.h, add.cpp и test.cpp

add.h создает заголовок для класса и представляет собой не что иное, как скелеты для последующей реализации.

add.cpp содержит фактический код для класса, указанного в add.h

test.cpp содержит метод main и объявляет экземпляр класса в add и использует некоторые его методы.

Однако у меня проблемы с компиляцией. В add.h у меня есть #DEFINES для предотвращения многократной записи заголовка, а в add.cpp и test.cpp у меня есть add.h, но когда я пытаюсь скомпилировать, используя строку

g++ test.cpp -o test

Я получаю ошибку о неопределенных ссылках на объекты и методы класса в add.h. Я искал в Google информацию о том, как это скомпилировать или запустить, но пока ничего не помогло, может ли мне помочь StackOverflow?

РЕДАКТИРОВАТЬ: Извините, я должен был также включить, что я пробовал g ++ test.cpp add.cpp -o test, и он тоже не работал, выдавая те же самые возникающие ошибки.

Ответы [ 4 ]

5 голосов
/ 03 апреля 2011

Скомпилируйте каждый файл отдельно, затем укажите ссылку:

g++ -Wall -c test.cpp
g++ -Wall -c add.cpp
g++ -o test test.o add.o

Или скомпилируйте и скомпонуйте все файлы одной командой:

g++ -Wall -o test test.cpp add.cpp
2 голосов
/ 03 апреля 2011

пробег g++ test.cpp add.cpp -o test

или

g++ -c add.cpp -o add.o
g++ -c test.cpp -o test.o
g++ test.o add.o -o test

флаг -c указывает gcc просто компилировать, а не ссылаться первые два шага скомпилируйте 1 cpp (модуль компиляции) в объектный файл последний шаг связывает их в один исполняемый файл

Ваша настоящая проблема связана с тем, что когда вы компилируете test.cpp, он ссылается на некоторые символы, которые не определены. Если вы просто компилируете (-c флаг), это нормально, и следующий шаг - связать файл этих объектов, содержащий пропущенные символы.

2 голосов
/ 03 апреля 2011

Выполнить g++ test.cpp add.cpp -o test

РЕДАКТИРОВАТЬ : скопировал мой комментарий здесь

Вам необходимо понять, почему ваш первоначальный подход не работает.Когда вы ссылаетесь на материал из заголовка add.h в test.cpp, компилятор ищет определения, но не находит их, потому что они находятся в add.cpp, а вы не передали его компилятору.Компилятор не может просто догадаться, что он должен искать определения в файле add.cpp только потому, что вы включили add.h в test.cpp.

1 голос
/ 03 апреля 2011

Вам нужно

 g++ test.cpp app.cpp -o myTest

, так как app.cpp содержит код, используемый test.cpp.

...