📌 1) 에러 발생
투포인터 문제 풀이 중 마주친 에러였다.
아래는 에러가 발생한 코드와 발생한 컴파일 에러에 대한 내용이다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
// 생략
for (int left = 0; left < N - 1; left++) {
for (int right = left + 1; right < N; right++) {
if (nums[right] - nums[left] >= M) break;
}
minDiff = min(minDiff, nums[right] - nums[left]); // ❗ 에러 발생
}
// 생략
}
error: invalid conversion from 'std::ios_base& (*)(std::ios_base&)' to 'std::vector<int>::size_type' {aka 'long long unsigned int'} [-fpermissive]
minDiff = min(minDiff, nums[right] - nums[left]);
^
컴파일 에러 중 ios_base가 명시된 에러는 처음 봐서 당황했다..
네임스페이스 문제인가? right에 오타가 있나? nums 배열의 범위를 넘어갔나? 변수형이 올바르지 않은가? 모두 확인해 봐도 문제는 보이지 않았는데..
📌 2) 에러 원인 및 해결
에러의 원인은 간단했다!
컴파일 에러의 기록만 보고 잘못된 변환이라길래 코드의 변수형 부분만 엄청 노려봤었지만, 정작 원인은 변수 선언 위치와 사용이 올바르지 않았다는 것이 문제였다.🤣
아래처럼 for문 내에서 사용한 right 변수를 해당 for문 밖에서 사용한 것이 문제였다.
for (int left = 0; left < N - 1; left++) {
for (int right = left + 1; right < N; right++) {
if (nums[right] - nums[left] >= M) break;
}
minDiff = min(minDiff, nums[right] - nums[left]); // ❗ 에러
}
위 코드를 아래처럼 변수의 유효 범위 내에서 해당 변수를 사용하도록 고쳐주면 해결이 된다.
for (int left = 0; left < N - 1; left++) {
for (int right = left + 1; right < N; right++) {
if (nums[right] - nums[left] >= M) {
minDiff = min(minDiff, nums[right] - nums[left]); // ❕ 에러 해결
break;
}
}
}
참고
stackoverflow - Invalid conversion from 'std::ios_base& (*)(std::ios_base&)' to 'int' [-fpermissive]
'💻 Programming > C++' 카테고리의 다른 글
[C++] 자주 쓰는 std::string 문자열 함수 모음 (0) | 2024.11.16 |
---|---|
[C++] STL sort() 함수 사용법 (0) | 2024.08.09 |
[Visual Studio Code] VS Code C++ 개발 환경 설정 (MinGW) (0) | 2024.07.27 |