2015-11-26 17 views
1

Я пытаюсь импортировать файл заголовка из проекта в файл .c в другом проекте. Идея состоит в том, чтобы иметь общий проект заголовков и функций, которые могут использоваться несколькими проектами в одном решении.Visual Studio 2015 C++ - внешние файлы заголовков

Это файл заголовка, и это .c файл в своем собственном проекте:

Util_library.h:

#pragma once 
#include <string.h> 

void reverse(char *c); 

Library.c:

#include "Util_Library.h" 

void reverse(char *c) { //reverse function to be called by main functions 
    size_t len = strlen(c) - 1, i, k = len - 1; //purpose of function is to 
    char tmp;         //reverse a given string 
    for (i = 0; i < len/2; i++) { 
     tmp = c[k]; 
     c[k] = c[i]; 
     c[i] = tmp; 
     k--; 
    } 
} 

Это является основной функцией (в другом отдельном проекте [но в том же решении]), который по #include В заголовке файл Util_Library.h, он может использовать функцию реверса():

#include <stdio.h> 
#include <stdlib.h> //malloc library 
#include "C:\Users\...\Library\Util_Library.h" //not real path 

    void main() { 
    char ch[100]; 
    printf("Enter a string of characters:"); 
    fgets(ch, sizeof(ch), stdin); 
    printf("%s", ch); 
    reverse(ch); 
    printf("%s", ch); 
    int chk = getchar(); 
} 

Даже если у меня нет синтаксических ошибок (в соответствии с компилятором, что есть), когда я пытаюсь запустить программу Я получаю эти 2 ошибки:

LNK2019 ошибки неразрешенного внешнего символа "аннулируется __cdecl обратного (символ *)" ссылка в функции основного Назначение 1D C (обратный @@ YAXPEAD @ Z): \ Users ... \ Assignment_1D \ Assignment_1D.obj 1

Ошибка LNK1120 1 неразрешенных внешних Назначение 1D C: \ Users \ mmusc \ Dropbox \ Development \ C (++) - Visual Studio \ Подборки \ x64 \ Debug \ Назначение 1D.exe 1

Спасибо за вашу помощь!

Редактировать Я включил фактический файл .c, который содержит функцию reverse(), однако в любом случае необходимо импортировать только заголовочный файл, а не весь файл .c, который может содержать даже функции, которые вам не понадобятся в специфическая основная функция Редактировать

+1

Возможный дубликат [проблемы с LNK2019] (http://stackoverflow.com/questions/1763480/lnk2019-problem) – Mgetz

ответ

2

Это не только вопрос о включении файлов заголовков: вы также должны включить файлы .c в свой проект.

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

Перейдите к своим проектам и включите этот файл .c в свой проект. Перекомпилируйте, и ваша программа будет запущена.

Надеюсь, это поможет.

Кстати, это не относится к Visual Studio, это будет происходить в любом IDE применить эту стратегию.

+0

Спасибо, работал как шарм. Однако мне было интересно, можно ли просто включать файлы заголовков, поскольку файл .c может содержать функции, которые мне не нужны, что было бы необязательно импортировать в мой код? – Logan

+0

Да, вы можете создавать функции утилиты в библиотеке и включать путь библиотеки и имя библиотеки в настройках вашего основного проекта. Вы также должны установить путь включения для файлов заголовков библиотеки в настройках основного проекта, чтобы вам не пришлось использовать полное имя пути в файле заголовка в основном файле .c. –

+0

Помните, что если вы создадите библиотеку, эта библиотека будет специфичной для вашей ОС и вашего компилятора. Однако это должен быть желаемый вариант. – Baltasarq

1

В том числе заголовка делает заявления из reverse доступны, но не реализация.

К сожалению, C++ построить модель довольно архаично, here is a decent introduction

Вы можете добавить.c файл к вашему проекту

В качестве альтернативы вы можете скомпилировать файл reverse .c/.h (вместе с другими файлами) в статическую библиотеку и добавить статическую библиотеку в свой основной проект. К сожалению, некоторые параметры компиляции между библиотекой должны совпадать (например, как это связано со средой выполнения C++). Кроме того, вы можете захотеть создать отдельные библиотеки отладки и выпуска. Более того, эти библиотеки не переносимы между компиляторами, часто даже между разными версиями одного и того же компилятора.

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