320x100

프로그래밍/Morden C++ 16

Module 형식으로 전환시 에러

*****.cpp(7,1): error C2653: class': 클래스 또는 네임스페이스 이름이 아닙니다. *****.cpp(8,2): error C4430: 형식 지정자가 없습니다. int로 가정합니다. 참고: C++에서는 기본 int를 지원하지 않습니다. *****.cpp(9,1): error C2550: 'namespace::class생성자 이니셜라이저 목록은 생성자 정의에만 사용할 수 있습니다. *****.cpp(10,1): warning C4508: 'namespace::class': 함수는 값을 반환해야 하므로 'void' 반환 형식으로 간주됩니다. ixx에서 정의한 클래스 정의를 cpp 파일에서 구현을 했는데 인텔리센스가 인식을 못하는 경우가 발생했다. 동일한 방식으로 작성한 코드로 작성한..

<memory> std::allocator<T> 클래스

기본적으로 STL에 제공되는 할당자 클래스다. 하지만 이는 사용자가 임의로 커스텀해서 사용할 수 있다. 커스텀을 위해선 특정 인터페이스를 만족해야 한다. 주의 사항으로는 1. 템플릿으로 만들어야 하며, 템플릿 매개 변수에는 실제로 사용할 객체의 타입 T를 사용한다. 2. 비정적 데이터 멤버를 가질 수 없다. 3. allocate / deallocate 함수를 가져야 하며, allocate의 인자로 객체 T가 필요한 갯수를 넘겨야 한다. 4. 반환하는 포인터는 void*가 아닌 실제 타입의 포인터(T*) 이여야 한다. cAlloc() = default; ~cAlloc() = default; allocator도 결국엔 template class 이기 때문에, 생성자와 소멸자를 작성해야하는데, allocato..

std::min, std::max 사용시

windows.h를 include하고 std::max(), std::min() 함수를 사용하려고 하면 error C2589: '(': '::' 오른쪽에 잘못된 토큰이 있습니다. error C2062: 예기치 않은 'unknown-type' 형식입니다. error C2059: 구문 오류: ')' 와 같은 에러 메시지를 보게 된다. 이유는 windows.h에 이미 정의 되어있는 max 매크로와 min 매크로가 존재하기 때문에 이름이 충돌나는 것인데 충돌 방지를 위해 다음과 같이 windows.h include 위에 NOMINMAX 디파인을 추가하면 해당 오류는 발생하지 않는다. #define NOMINMAX #include

std::map

map은 key와 value로 구성된 컨테이너로 을 include해 사용할 수 있다. 선언 // key_type - 키의 오름차순으로 정렬되며 정수형 > 스트링 > 사용자 정의 타입 순으로 느려진다. std::map map_container; 데이터 삽입 insert의 결과로 pair가 리턴되며, second값이 bool 타입이므로 insert의 성공여부를 알 수 있다. map_container.insert(std::make_pair(key, data)); 데이터를 삽입하기에 가장 편한 방법이다. map_container[key] = data; 이 두 가지 방법의 차이점에 대해 정리해둔 블로그 내용을 간략히 얘기하자면, operator[]는 map에서 키를 먼저 찾아보고 없는 경우에 value의 기본 생..

320x100