Как на с++ вынести функцию в отдельный файл?

Модератор: Модераторы разделов

warp
Сообщения: 135

Как на с++ вынести функцию в отдельный файл?

Сообщение warp »

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

file unnamed.cpp

Код: Выделить всё

foobar();
foobat() { return 0 };

file main.cpp

Код: Выделить всё

cout << foobar() << endl;


но при компилировании я получаю ошибку: "множественное определение foo()".
вопрос: как вынести функцию foobar() в отдельный файл, что бы она была доступна из main.cpp?

g++ 4.3.3
за мировое господство! банзай, товарищи!
Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Как на с++ вынести функцию в отдельный файл?

Сообщение Zeus »

Препроцессорных "сторожей" надо ставить

Код: Выделить всё

#ifndef _foobar_cpp_
#define _foobar_cpp_

тут описание функции foobar

#endif // _foobar_cpp_


Но обычно программные модули компилируют раздельно.
Между ними разделяются только объявления функций, а описания компилятся в отдельные объектные файлы.
И собирается это всё вместе на этапе сборки конечного, исполняемого файла или библиотеки.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Как на с++ вынести функцию в отдельный файл?

Сообщение NickLion »

Я так понял, что автор не создал header файла?
необходимо сделать так:
funcs.h

Код: Выделить всё

#pragma once // для компилеров, которые это понимают, оптимальнее, чем ifndef+define
#ifndef _FUNCS_H // если компилер проигнорил #pragma
#define _FUNCS_H // то защитить 2-кратное объявление при помощи ifndef/define
foobar();
#endif

funcs.cpp

Код: Выделить всё

#include "funcs.h"
foobar() {....}

main.cpp

Код: Выделить всё

#include "funcs.h"
...
cout << foobar() << endl;
...
Спасибо сказали: