Связывание двух.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
похоже, каждый новичок проходит через это (включая меня), в главном.СРР включить .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
вам нужно поставить include следующим образом:
#include "headerfilename.h"
в самом верху каждой .документ ЧГК.