C,C++/Error & Warning10 [C++] C2572 컴파일러 오류. redefinition of default argument // declaration void func(int n = 0); // definition void func(int n = 0) // C2572 { .... } void func(int n) // OK { .... } 위처럼 디폴트 매개변수를 가지는 함수를 작성하다 다음과 같은 에러가 떴음. 선언과 정의를 분리하여 작성하였고, 선언과 정의에 모두 디폴트 매개변수를 쓰면 아래와 같이 C2572 에러 발생 에러 내용은 디폴트 매개변수의 재정의. 선언에 디폴트 매개 변수를 쓰고 정의에도 쓸 경우 디폴트 값이 다를 경우를 막기 위한 에러인 듯 함. 기본 매개 변수는 다시 정의할 수 없습니다. 매개 변수에 다른 값을 지정 해야 하는 경우에는 기본 매개 변수를 정의 하지 않은 상태로 두어야 합니다. https://.. 2020. 1. 11. [C++] LNK2019, LNK1120 클래스 템플릿 사용 시 링크 오류 클래스 구현 도중 틀린 건 없는데 아래 에러가 계속 발생하였다. LNK2019, LNK1120 https://docs.microsoft.com/ko-kr/cpp/error-messages/tool-errors/linker-tools-error-lnk2019?view=vs-2019 결론 먼저 말하면 클래스 템플릿은 헤더와 소스를 분리하면 안되고 그 선언과 구현(정의)을 같은 파일(.h)에 해야 한다. 나는 헤더 파일과 소스 파일을 따로 작성하였는데 main 함수가 있는 소스파일에서 헤더파일만 include 했더니 제대로 참조를 하지 못했다. 그 이유를 살펴보면 우선 우리가 클래스 템플릿가 아닌 일반 클래스의 선언과 구현을 헤더와 소스 파일에 분리하여 작성했다고 생각해 보자. 그리고 main에서 해당 클래스.. 2019. 11. 28. [C++] typename 키워드 | C2760, C7510 typename 키워드 - 템플릿 정의에서 알 수 없는 식별자가 형식(Type)이라는 것을 컴파일러에게 알려줍니다. - 템플릿의 타입 매개변수로 정의된 타입을 사용하는 선언문을 정규화하는데 사용합니다. template void func(const T& obj) { T::size_type _size; } 위 코드는 아래와 같은 컴파일 에러를 발생시킵니다. 예를 들어 string 타입을 인자로 전달할 경우 string::size_type 타입을 사용하려는 의도이지만 T의 타입은 컴파일 과정에서 해당 함수 호출 시점에서 정해지기 때문에 미리 컴파일러에게 T::size_type이 타입이라는 것을 알려주어야 합니다. 따라서 아래와 같이 사용하면 typename 키워드와 함께 사용하면 정상적으로 컴파일이 됩니다. .. 2019. 11. 25. [C/C++] 메모리 동적할당 시 malloc을 사용한다면 / dereferencing NULL pointer, Warning C6011 C 또는 C++에서 malloc 함수를 사용할 경우 아래와 같이 사용할 수 있다. int* ptr = (int*)malloc(sizeof(int)*5); *ptr = 4; 하지만 위 코드는 아래와 같이 C6011 경고를 발생시킨다. Dereferencing NULL pointer 'ptr'. 널 포인터 ptr을 역참조하고 있다라는 뜻이다. malloc 함수는 메모리 할당에 실패하면 null을 반환하는데 (ex. 메모리 공간이 부족한 경우 ) 이 경우 ptr이 null을 가지기 때문에 올바르지 않은 메모리 위치(null)에 접근하는 것을 막기위해 경고를 띄우는 것이다. 올바른 사용법은 다음과 같이 포인터 변수가 null인지 확인 후 사용한다. C++에서는 웬만하면 메모리 동적할당 시 malloc보단 new.. 2019. 11. 24. 이전 1 2 다음