#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:
Вы можете размещать определения функций в заголовочных файлах. но здесь две вещи неверны
-
Вы вызываете
fun1
внутри h1.h , но оно определено в h2.h. поэтому h1.h не может видеть определение в h2.h. для преодоления этого включите h2.h в h1.h -
Ваш вызов функции и определение не совпадают.
- определение функции должно быть
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
части