Невозможно использовать функции, определенные в заголовочном файле

Мой исходный файл начинается с:

#include "foo.h"

Я могу использовать все свои глобальные переменные, типы и структуры из моего заголовочного файла. В моем заголовочном файле я начал с пары включений:

#include<file.h>

Затем перейдите к глобальным переменным:

#define GLOBAL

Затем структуры:

#typedef struct boo;

Потом печатает. Затем я перехожу к объявлениям функций. То есть:

size_t foo(int*r, size_t nitems);

Что я делаю неправильно, что я получаю ошибки компоновщика>


person Matt    schedule 15.07.2011    source источник
comment
Я не могу не задаться вопросом, для чего нужен #define GLOBAL?   -  person Martin Kristiansen    schedule 15.07.2011
comment
#define global - это просто глобальное определение переменной, я написал: #define Global 5 Но я получаю LNK2001   -  person Matt    schedule 15.07.2011
comment
Пожалуйста, доведите свою программу до минимального, полного образца, демонстрирующего проблему, и опубликуйте его здесь вместе с любыми ошибками компилятора и компоновщика, которые он производит. Информацию о том, как это сделать и почему это важно, см. на странице sscce.org.   -  person Robᵩ    schedule 15.07.2011
comment
Вы включаете заголовочные файлы, поэтому объекты компилируются. Но вам нужно включить библиотеки для объектов, на которые можно ссылаться для файлов заголовков системы (‹›) с ключом компилятора -l.   -  person uncleO    schedule 16.07.2011


Ответы (3)


Проблема, по-видимому, в том, как вы связываетесь.

person Bruce Stephens    schedule 15.07.2011

Заголовочный файл предоставляет объявление функции для вашего исходного кода. Как вы уже поняли, этого достаточно, чтобы ваш код скомпилировался, но не для его компоновки.

Чтобы связать его, вы должны предоставить компоновщику файл, содержащий фактическую скомпилированную функцию - объявление функции фактически является обещанием компилятору, что вы это сделаете.

Как именно вы это сделаете, зависит от того, какие инструменты вы используете и в какой форме находится скомпилированная функция.

person Nigel Harper    schedule 15.07.2011

#define для простых идентификаторов подстановки работает точно так же, как копирование/вставка.

После того, как вы сделаете

#define GLOBAL 5

следующий код

int GLOBAL;
GLOBAL = 13;
putchar(GLOBAL);

превращается в

int 5;
5 = 13;
putchar(5);

который явно не компилируется.

person pmg    schedule 15.07.2011