Связывание двух.cpp и a.H файлы

Я делаю упражнение (из третьей главы мышления на C++), но у меня есть проблема, связывающая два .cpp-файлы.

Это упражнение:--6-->

создать заголовочный файл (с расширением.ч.)’ В этом файле, объявление группы функций путем изменения списков аргументов и возвращаемые значения из числа следующих: void, char, int и float. Теперь создайте .cpp файл, который включает header file и создает определения для всех из них функции. Каждое определение должно просто распечатать имя функции, список аргументов и тип возврата, чтобы вы знаю, что это называется. Создай вторую .cpp файл, что включает файл заголовка и определяет int main( ), содержит вызовы всех ваших функций. Компиляция и запуск ваша программа.

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

неопределенная ссылка на " func1 ()"

неопределенная ссылка на ' func2 (int)'|

неопределенная ссылка на ' func3 (char, int, double)'|

неопределенная ссылка на `func4()'|

||=== сборка завершена: 4 ошибки, 0 предупреждений ===/

почему он не может найти определение функции?

##EDIT
Вот мои три файла:

func_ex.ч

void func1(void);
int func2(int i);
char func3(char c, int i, double d);
float func4(void);

func_ex.cpp

#include "func_ex.h"
using namespace std;

void func1(void) {
    cout << "void func1(void)" << endl;
}

int func2(int i) {
    cout << "int func2(int i)" << endl;
}

char func3(char c, int i, double d) {
    cout << "func3(char c, int i, double d)" << endl;
}

float func4(void) {
    cout << "func4(void)" << endl;
}

func_ex_main.cpp

#include "func_ex.h"
#include <iostream>
using namespace std;

int main(int argc, char* argv[]) {
    func1();
    int i;
    func2(i);
    char c; double d;
    func3(c, i, d);
    func4();
}

Я usig GCC как компилятор (и Code::Blocks как IDE, но я думаю, что это не важно).

8 ответов


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

#include "myheader.h"

вы не забыли скомпилировать оба файла вместе? Например:

GCC-o myprogram file1.cpp file2.cpp


gcc -c func_ex.cpp -o func_ex.o
gcc func_ex_main.cpp func_ex.o -o func_ex_main

похоже, каждый новичок проходит через это (включая меня), в главном.СРР включить .cpp файл, а не.h,

//func_ex_main.cpp
#include "func_ex.cpp" // instead of .h
#include <iostream>
using namespace std;
//etc...

из-за чего .cpp связан с заголовком через include in that .cpp-файл, и каждое определение функции связано с замедлением через нотацию :: перед определением.

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


для таких, как я, кто может использовать IDE BloodShed Dev c++.

создайте папку проекта, затем перейдите к размещению файлов H и файлов CPP в папке проекта.

У меня была та же проблема, что и упомянутая выше, вывод, который я сделал, заключался в том, что мой компилятор компилировал только файлы H и даже не читал файлы CPP, связанные с ним. Когда я помещаю их в папку проекта, Мой компилятор скомпилирует все файлы вместе, позволяя моему коду бежать.

вот ссылка на создание папки проекта для тех, кто использует кровопролитие.

http://www.horstmann.com/bigcpp/help/bloodshed/index.html

Что касается других пользователей IDE, я считаю, что проблема аналогична. Если кто-то нуждается в доработке, просто дайте мне знать.


Я тоже использую Code:: blocks, и у меня была та же проблема. По умолчанию в этой среде IDE создается только один файл. Вот что я сделал: проект - > свойства - > цели сборки - > Выберите файлы, связанные в правом нижнем разделе. Надеюсь, это поможет!


прежде всего, как вы можете иметь func1 (), func2 (), func3() без оператора return. Попробуйте поместить тело заголовка внутри этих (#include guards):

#ifndef func_ex.h
#define func_ex.h
/* your code */

#endif 

Я думаю, что вы должны есть!--0--> в своем func_main.cpp


вам нужно поставить include следующим образом:

#include "headerfilename.h"

в самом верху каждой .документ ЧГК.