C,C++76 [C++] LNK2001, LNK1120 링크 오류 (static 관련) 다음과 같이 클래스 내부에 static 멤버 변수를 선언하고 static 멤버 함수 내에서 사용하는데 계속 위와 같은 링크 에러가 발생하였다. // A.h class A { public: static void Func(); .... private: static int num; }; // A.cpp void A::Func() { num = 5; } 링크 에러는 뭔가 서로 연결해주지 못해서 발생하는 에러인데, 일단 static 변수는 프로그램 시작하고 클래스 개체 생성 전에 메모리에 올라가기 때문에 static 함수에서만 사용 가능하다는 건 알 것이다. 그래서 나는 그냥 static 변수면 static 함수에서 바로 사용할 수 있는 줄 알았다. (내 기억으론 자바에선 그렇게 썼던 것 같았는데) 근데 찾아보니.. 2020. 2. 4. [C++] 캐스팅 연산자에 대해 알아보자 | static_cast, reinterpret_cast static_cast와 reinterpret_cast는 C 타입의 캐스팅이 용도에 따라 분리되어 C++에 등장한 캐스팅 방법이다. 예를 들어 C에서는 다음과 같이 캐스팅을 하였고 웬만하면 모든 캐스팅이 가능했다. unsigned int num = 20; int signedNum = (int)num; 하지만 이는 사용자의 의도와 상관없이 대부분의 캐스팅을 허용해주기 때문에 사용자의 실수를 허용하는 일이 많았다. 그래서 C++에서 용도에 따라 사용하도록 4가지 캐스팅으로 나누어서 도입하였고 여기선 제일 자주 사용되는 2가지만 정리한다. 그 2가지는 static_cast와 reinterpret_cast이며 특징은 다음과 같다. - 사용 방법 static_cast(변환할 대상) reinterpret_cast(변.. 2020. 1. 23. [C++] 한 줄 짜리 지식 모음 알게된 개념 가끔 추가... [클래스 멤버 변수 초기화] - 생성자 내에서 멤버 변수에 값을 넣는 것은 초기화가 아닌 대입이다. 따라서 함수의 헤더에 사용하는 초기화 리스트 (initializer list)를 사용하자. [가상 함수와 가상 테이블] - 가상 함수들을 저장하고 있는 가상 테이블은 클래스마다 하나씩 존재하며, 객체가 할당된 메모리 상에 가상 테이블의 주소가 있다. 따라서 가상 함수가 필요하다면 객체의 메모리에서 가상 테이블의 주소를 찾아 가상 테이블로 간 뒤 가상 테이블에서 원하는 함수의 주소를 또 찾아야 한다. 따라서 가상 함수는 런타임 중 실체를 찾는 동적 바인딩이며 속도가 느리다. 하지만 C++의 다형성(Polymorphism)의 핵심 개념인 동일한 interface, 다른 behavi.. 2020. 1. 20. [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++] 클래스의 멤버가 저장되는 영역 및 메모리 차지 클래스 사용 도중 헷갈리던 내용이 있어서 정리함. 함수 내에서 임시로 객체를 생성할 때 사용 용도에 따라 비효율적인 부분이 있는지 헷갈려서 instance 생성 시 각 멤버들이 어떻게 메모리를 차지하는지 개념을 정리하기 위한 글. 우선 class는 멤버 변수와 멤버 함수를 가질 수 있고 각각 정적(static)과 비정적(non-static) 멤버 변수, 함수를 가질 수 있다. 먼저 클래스 타입의 객체 또는 인스턴스 자체의 크기는 비정적 멤버 변수만 영향을 미친다. 즉 멤버 변수로 int형 변수 1개를 가지면 이 클래스의 instance의 sizeof는 4바이트, 2개를 가지면 8바이트 이런 식. 비정적 멤버 변수는 객체의 생성과 동시에 생성된다. 객체 내의 지역 변수와 동일하므로 스택에 저장된다. (물론.. 2020. 1. 10. [C++] 조정자(Manipulator)를 알아보자 C++은 출력 형식을 사용자가 원하는대로 지정할 수 있는 Manipulator를 제공한다. c++의 outstream인 std::cout과 2020. 1. 3. 이전 1 ··· 6 7 8 9 10 11 12 13 다음