mfc 포인터 배열

조회수 1001회

mfc로 작성되어있는 (수정 후)코드에 대해서 포인터 배열로 동적할당 후, '==' 관계 연산자로 NULL과 비교할려고 하는데 '==' 연산자 중 두 개 이상이 이 피연산자와 일치합니다.> 오류가 발생합니다. 배열의 멤버변수 아무거나 NULL과 비교하면 오류가 발생하지 않는데, 배열과 직접적으로 비교하면 오류가 발생하는 원인을 알고 싶습니다.

*수정 전 [header]

#define Cnt 20
CTest *arrTest[Cnt];

[Cpp]

for (int idx = 0; idx < Cnt; idx++)
{
    arrTest[idx] = NULL;
    arrTest[idx] = new CTest;
    // ... 내부설정
}

for (int idx = 0; idx < Cnt; idx++)
{
    if (arrTest[idx] == NULL)
        continue;

}

*수정 후 [header]

int Cnt;
CTest *arrTest;

[Cpp]

// Cnt는 InI파일에서 20을 불러와서 저장합니다.
arrTest = new CTest[Cnt];
for (int idx = 0; idx < Cnt; idx++)
{
   //...  내부 설정
}

for (int idx = 0; idx < Cnt; idx++)
{
    if (arrTest[idx] == NULL)  //← 1. '==' 연산자 중 두 개 이상이 이 피연산자와 일치합니다.
                               //   2. 'CWnd::operator ==' 2개 오버로드에 비슷한 변환이 있습니다.
        continue;

}
// [header 파일 CTest 선언]
public:
    CTest(CWnd* pParent = NULL);
    virtual ~CTest();


// [Cpp 파일 생성자 / 소멸자]
CTest::CTest(CWnd* pParent /*=NULL*/) : CDialogEX(CTEST::IDD, pParent)
{
    memset(m_home_dir, 0, 260);
    ....

}
CTest::~CTest()
{
}

[동적할당 후 오류 부분에서 배열에 대한 커서의 설명]

수정 전 : CTest *Ctt arrTest[20]

수정 후 : CTest *Ctt arrTest

수정 후 부분에서 arrTest[idx] == NULL이 오류가 왜 발생하는지 모르겠습니다.

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    수정전 코드는 포인터의 배열(즉, 더블 포인터)을 선언하여 사용하고 있는데, 수정후 코드는 객체의 배열(즉, 일반배열)을 선언하여 사용하고 있습니다.

    수정 후 헤더안의 CTest *arrTest;CTest **arrTest;로 바꿔야 하고요.

    arrTest = new CTest[Cnt];arrTest = new CTest*[Cnt];로 바뀌어야 합니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 수정 전 코드에서 포인터 배열이 CTest가 포인터 객체고, 배열이 포인터여서 더블 포인터로 선언해야하는게 맞다. 라고 이해했는데 맞나요? 황수민 2023.8.11 13:44
    • 배열은 '자료형 배열이름[배열크기]' 형태로 선언됩니다. 수정전 코드를 보시면 자료형은 `CTest*`형이고 배열이름은 `arrTest`이고 배열크기는 `Cnt`개입니다. `CTest*`는 CTest형 변수의 주소를 저장할수있는 포인터변수이고, arrTest는 CTest*형 포인터변수를 저장하는 배열입니다. 알 수 없는 사용자 2023.8.11 16:50

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)