У меня в main.cpp есть эта функция:
double median(double values[], int count) {
int i, j, n = count, t;
for (i = 1 ; i <= n - 1 ; i++)
{
for (j = 1 ; j <= n - i ; j++)
{
if (values[j] <= values[j + 1])
{
t = (int) values[j];
values[j] = values[j + 1];
values[j + 1] = t;
}
}
}
if ( n % 2 == 0)
return (values[n / 2] + values[n / 2 + 1]) / 2.0 ;
else
return values[n / 2 + 1];
}
и я хочу переместить эту функцию в другой файл. Итак, я нажимаю на эту функцию и затем нажимаю F6, а затем я пишу имя файла, например. MathFunctions
и тогда я получаю:
MathFunctions.h:
#ifndef PROJECT_NAME_MATHFUNCTIONS_H
#define PROJECT_NAME_MATHFUNCTIONS_H
#endif //PROJECT_NAME_MATHFUNCTIONS_H
MathFunctions.cpp:
#include "MathFunctions.h"
double median(double values[], int count) {
int i, j, n = count, t;
for (i = 1 ; i <= n - 1 ; i++)
{
for (j = 1 ; j <= n - i ; j++)
{
if (values[j] <= values[j + 1])
{
t = (int) values[j];
values[j] = values[j + 1];
values[j + 1] = t;
}
}
}
if ( n % 2 == 0)
return (values[n / 2] + values[n / 2 + 1]) / 2.0 ;
else
return values[n / 2 + 1];
}
Я новичок в C ++, и я не понимаю, почему это так работает. Я бы предпочел, чтобы он поместил объявления методов, таких как:
double median(double values[], int count);
В файле * .h и внутреннюю часть метода в файле * .cpp, а затем включите файл * .h в мой main.cpp следующим образом:
#include "MathFunctions.h"
Может кто-нибудь объяснить мне, почему это так работает? Что я должен делать с файлами, созданными CLion? Должен ли я включить MathFunctions.cpp вместо файла заголовка в моем main.cpp?
К сожалению, это ошибка CLion, отслеживаемая https://youtrack.jetbrains.com/issue/CPP-9329, пожалуйста, создайте учетную запись Jetbrains и проголосуйте за эту проблему.
Я не уверен, что вы подразумеваете под «обходным путем». Чтобы ваш код работал, вам нужно
double median(double values[], int count);
в MathFunctions.h
включить файл.main.cpp
, добавлять #include "MathFunctions.h
как вы упомянулиMathFunctions.cpp
к списку исходных файлов для вашего исполняемого файла.Например, если у вас есть созданный в CLion файл CMakeLists.txt, у вас должно быть что-то похожее на
set(SOURCE_FILES main.cpp MathFunctions.cpp)
add_executable(foo ${SOURCE_FILES})
Некоторые другие случайные комментарии:
median()
это не «метод», это «функция» или, точнее, «автономная функция» (то есть функция, которая не является частью класса).median()
на самом деле это не C ++, это C, поскольку он использует низкоуровневый массив C. Вы можете использовать std::vector<double>
вместо.new
а также delete
). Удачи в вашем путешествии!редактировать
Изменена ссылка на ошибку Jetbrains на первую, сообщающую о проблеме.
Других решений пока нет …