코드 공부 중인데 뭐가 문제인지 알 수가 없어 좀 도와줘
이게 헤더
SafeIntArray.h
#pragma once
#ifndef SAFEINTARRAY_H_INCLUDED
#define SAFEINTARRAY_H_INCLUDED
#include <iostream>
class SafeIntArray {
int limit;
int *arr;
public:
SafeIntArray(int nOfEl) : limit(nOfEl) {
arr = new int[nOfEl];
}
~SafeIntArray() {
delete[] arr;
}
int &operator[](int i) {
if (i < 0 || i >= limit) {
std::cout << "첨자가 범위를 벗어나 프로그램을 종료합니다";
exit(1);
}
return arr[i];
}
};
#endif // !SAFEINTARRAY_H_INCLUDED
이게 소스
SafeIntArray.cpp
#include "SafeIntArray.h"
#include <iostream>
using namespace std;
int main() {
SafeIntArray a(10);
for (int i = 0; i < 10; i++)
a[i] = i;
cout << a[5] << endl;
cout << a[12] << endl;
return 0;
}
비쥬얼 스튜디오 2017 버전 쓰고
이게 코드를 빌드하면 하단 출력부에 나오는 결과
========== 빌드: 성공 0, 실패 0, 최신 1, 생략 0 ==========
성공도 아니고 실패도 아니고 오류도 안나오고 당최 감을 못잡겠음
operator[] 부분이 문제인가 싶어서 앞에 friend도 붙여 봤는데
또 이걸 붙이면 또 막 오류가 붙어 나와 operator[]가 멤버 함수여야 한다나?
책이랑 버전이 달라서 그런가 싶기도 한데 뭐가 문제일까?
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ pragma once 랑 헤더가드 둘다 쓰는건 뭐냐 더 확실히 가드하려고? - dc App
야 operator[] 는 멤버로 밖에 못 써.... - dc App
pragma once는 비주얼 스튜디오에서 클래스 추가하면 기본으로 딸려오길래 걍 냅뒀어
그러면 헤더가드 안 해도 돼 제발 둘 중에 하나만 해라 - dc App
근데 멤버로 밖에 못쓴다 라는게 []를 다른 클래스에서 다중정의 가능하도록 하는게 불가능하다는 소리야??
아니 각 클래스의 멤버 함수로 정의하면 되잖아 - dc App
멤머 함수로 정의하래서 operator[] 앞에 &를 지워봤다가 오류떴거든 근데 다시 쓰니까 정상적으로 성공 1 출력됐음
뭐가 어떻게 된건지 모르겠어 암튼 ㄳ
아 나 뭔지 알았어 그냥 main에서 a(12) 를 출력하려니까 [] 범위를 넘어서 exit가 동작한건데 이게 디버그로 보니까 중단점에서 그냥 나가지고 출력에서 성공이 없어서 내가 실패한 프로그램으로 생각한거였던거 같음
이거 맞는거 같아 암튼 ㄳㄳ