2017-05-22 26 views
0

나는 나의 MAIN.CPP에이 기능이 있습니다리팩터링 : CLion에서 이동 (F6) - 왜 그렇게 작동합니까?

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.h : MathFunctions 후 나는 끝낼

#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에서 초보자 해요 ++이가 왜 이해가 안 그런 식으로 일해. 나는 오히려이 같은 방식의 선언을 넣어 기대 : * .H 파일과 *의 .cpp 파일에 메소드의 내부에서

double median(double values[], int count); 

다음처럼 내 MAIN.CPP에 * .H 파일을 포함 그 :

#include "MathFunctions.h" 

왜 이런 식으로 작동하는지 설명 할 수 있습니까? CLion이 만든 파일로 무엇을해야합니까? main.cpp에 헤더 파일 대신 MathFunctions.cpp를 포함시켜야합니까?

+0

저는 CLion을 사용하지 않고 여러분이 기대하고있는 것이 무엇인지를 확인하기 위해 기대하고 있습니다. 정의는 훌륭하지만 #include "MathFunctions.h"는 그 정의 안에 있어야합니다. * .cpp 파일은 데이터 캡슐화를 중단 할 수 있으므로 주 파일에 포함시키지 마십시오. 해당 파일의 개인 함수도 호출 할 수있게됩니다. –

+0

그래서 왜 그렇게 많이 부러 졌습니까? 해결 방법은 없습니까? – Defozo

답변

1

불행히도이 내용은 https://youtrack.jetbrains.com/issue/CPP-9329으로 추적되는 CLion 버그이므로 Jetbrains 계정을 만들어이 문제에 대해 투표하십시오.

"해결 방법"의 의미가 확실하지 않습니다. 당신의 코드 작업을하려면 MathFunctions.h 파일을 포함에 double median(double values[], int count);의 함수 선언을 작성

  1. 해야합니다. 당신의 main.cpp에서
  2. , 당신은 CMakeLists.txt에서
  3. 언급으로 #include "MathFunctions.h를 추가하려면 실행 파일 소스 파일 목록에 파일 MathFunctions.cpp를 추가, (이 특정 CLion되지 않은, 당신은 CMake의 기초를 알고 있어야합니다).
    • median()

      은 "방법이 아닙니다 : 예를 들어

, 당신은, 당신이

set(SOURCE_FILES main.cpp MathFunctions.cpp) 
add_executable(foo ${SOURCE_FILES}) 

일부 다른 임의의 의견과 비슷한 뭔가를해야 CLion 만든 CMakeLists.txt을 한 가정 ", 그것은"함수 "또는보다 정확하게"자유형 함수 "(즉, 클래스의 일부가 아닌 함수)입니다.

  • median()은 저수준 C 배열을 사용하므로 실제로 C++가 아니며 C입니다. 대신 std::vector<double>을 사용할 수 있습니다.
  • C 및 C++은 낮은 수준이며 어떤 언어를 사용 하느냐에 따라 혼란 스러울 수 있습니다. :-) C++의 좋은 최신 책을 선택하는 것이 좋습니다. 현대 C++은 최소한 C++ 11 및 수행하지 않는 프로그래밍 스타일을 의미합니다. 메모리 할당/할당 해제 (즉, newdelete을 사용하지 않음). 당신의 여행에 행운을 빌어 요!
  • 편집 문제를보고 첫 번째로 JetBrains의 버그에

    변경된 링크.

    +0

    귀하의 문제가 중복으로 표시되어 있습니다. 그래서 나는 다른 하나에 여기에 표를했습니다 : https://youtrack.jetbrains.com/issue/CPP-9329 그리고 나는 모든 사람들이 똑같이하도록 격려합니다. 이러한 초등 기능은 훌륭한 IDE에서 깨질 수 있다는 사실에 실망합니다. 대답 해 주셔서 대단히 감사합니다. – Defozo

    +1

    @Defozo는 원래 문제를 지적하기 위해 링크를 업데이트했습니다. 감사합니다. –