определение функции в заголовочном файле на c

#c #inline #header-files

#c #встроенный #заголовочные файлы

Вопрос:

У меня есть простой cpp-проект, в котором есть один .cpp-файл (a.cpp ) и два файла .h (h1.h и h2.h).

В a.cpp , У меня есть :

 #include "h2.h"
#include "h1.h"
  

В h1.h у меня есть :

 double abc = fun1(a, b); //using fun1() here. a and b are string types.
  

В h2.h у меня есть :

 double fun1(string a, string b)
{ //definition
}
  

Ошибка: в h1.h => fun1() in not declared in this scope.

Вопрос в том, правильно ли я это делаю? можно ли поместить определение функции в заголовочный файл? должен ли я использовать inline здесь?

Редактировать:

вот h1.h

 void checkForOneToOneSimilarity(vector <string> amp; folder1, vector <string> amp; folder2)
{
    int i=0, j=0, l1 = folder1.size(), l2 = folder2.size();
    //chunking(folder1[0]);
    while(i < l1 amp;amp; j < l2)
    {
        if(folder1[i] == folder2[j])
        {
            double similarity = fun1(folder1[i], folder2[j]);
            i  ;
            j  ;
        }
        else if(folder1[i] > folder2[j]) j  ;
        else i  ;
    }
}
  

Комментарии:

1. В отличие от C, в C функция без параметров — это именно то, что: функция, у которой нет параметров. Вам необходимо объявить и определить его соответствующим образом.

Ответ №1:

Вы объявили double fun1() в h2.h,
но вы вызвали функцию double fun1(std::string, std::string) .
Компилятор выполняет поиск в определении double fun1(std::string, std::string) , которое не объявлено.

Вы должны изменить заголовок функции в h2.h на double fun1(string a,string b)

Комментарии:

1. тогда как правильно это сделать, если я хочу, чтобы определение все еще было в h2.h?

2. После вашего редактирования, где находится функция fun1(), вызываемая в h1.h? пожалуйста, отредактируйте имена функций, чтобы прояснить вопрос.

3. что вы подразумеваете под заголовком функции? я только что отредактировал вопрос.

Ответ №2:

вы объявили функцию fun1() в файле h2.h и вызвали функцию h1.h, поэтому, когда компилятор выполнит поиск по fun1(), он не найдет ее, попробуйте включить «h2.h» в файл «h1.h»

Ответ №3:

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

  1. Вы вызываете fun1 внутри h1.h , но оно определено в h2.h. поэтому h1.h не может видеть определение в h2.h. для преодоления этого включите h2.h в h1.h

  2. Ваш вызов функции и определение не совпадают.

    • определение функции должно быть

    double fun1(string a, string b)
    { //definition
    }

    • соответствующий вызов функции должен быть

    double abc = fun1("some string 1", "some string 2");

Добавить: правильные три файла должны быть

h1.h

 double addTwoStringNumbers (string a, string b)
{
 double tot = atof(a.c_str())   atof(b.c_str());
 return tot;
}
  

h2.h

 #include "h1.h"    

void showValue()
{
 double total = addTwoStringNumbers("2", "3");
 std::cout << total << std::endl;
}
  

a.cpp

 #include "h2.h"

int main()
{
 showValue();
 return 0;
}
  

Комментарии:

1. нет, параметры есть, и я попытался включить h2.h в h1.h, но опять же, та же проблема.

2. проверьте три файла, которые я показал в Append части