Programming Language/C/C++

[C/C++] error C2872, 모호한 기호입니다

깐요 2017. 4. 24. 17:17

error C2872

#include <iostream>

using namespace std;

...

bool is_empty(LinkedListType *list)
{
	return list->head == NULL ? true : false;
}

void delet(LinkedListType *list, int pos)
{
	if ((!is_empty(list)) && (pos >= 0) && (pos < list->length))
	{
		ListNode *p = get_node_at(list, pos - 1);
		ListNode *removed = get_node_at(list, pos);
		remove_node((&list->head), p, removed);
		list->length--;
	}
}

...

위와 같은 코드를 실행하면 다음과 같은 오류가 발생할 수 있다

error C2872: 'is_empty': 모호한 기호입니다.

이 오류는 namespace 기능에 의해 발생하는 오류이다

14번 줄에 있는 is_empty 가 'bool is_empty(LinkedListType *list)' 인지 'std::is_empty' 인지
구별을 하지 못하기에 발생한다


이를 해결하는 방법은 함수의 이름을 바꾸어주거나 is_empty를 확실하게 구별시켜주면 된다

구별시켜주는 방법은 

::is_empty

를 이용하면 'bool is_empty(LinkedListType *list)', namespace가 없는 함수로 인식한다

std::is_empty

를 이용하면 std 상의 is_empty 로 인식한다


MSDN::https://msdn.microsoft.com/ko-kr/library/t57wswcs.aspx

320x100