VC++8.0에서의 vector::erase(), iterator
VC++8.0 이하의 버전에서는 vector 객체를 iterator로 순환하면서 vector 내의 아이템을 삭제할 때 아래와 같은 코드에 문제가 없었습니다.

std::vector<int> vt;
std::vector<int>::iterator it;

for(it=vt.begin();it<vt.end();it++){
   if(조건){
       vt.erase(it);
  }
}

하지만 VC++8.0에서는 런타임시 오류가 발생합니다.
그래서 아래와 같이 코드를 바꿨습니다.

for(it=vt.begin();it<vt.end();){
   if(조건){
       it = vt.erase(it);
  }
  else{
       it++;
  }
}

vector::erase()는 반환값으로 삭제한 iterator의 다음 iterator를 반환합니다.

출처 : http://ani2life.egloos.com/3230570

Leave a comment

enum

Posted 2007/08/01 13:30, Filed under: Code Factory
// C4482.cpp
// compile with: /c /W1

struct S {
  enum E { a };
};

int i = S::E::a;   // C4482
int j = S::a;   // OK

enum - 열거체의 경우 잘못된 사용법에 따라 지적을 받았는데,
Gpg에 질의하여 왜 잘못되었는지 알게 되었다.
열거체로 정의했을 경우 SKILL::ICEBALL 같은 것은 오류 라는것!
당연한 이야기만 위와같은 예는 네임스페이스가 아니기 때문이다.
그것을 보안하기 위해 namespace나 위와같이 struct로 감싸는 것이 좋다.

namespace VTX_BOX
{
  enum{ FVF = ~ }
}

Leave a comment

팁!팁!팁!

Posted 2007/06/17 02:33, Filed under: Code Factory

닷넷에서의 코드 더보기 기능 : Ctrl + Space


Leave a comment



저같은 경우는 디버그모드 에서 릴리즈 모드로 변경시킬때,
다음과 같이 라이브러리 중첩 에러가 발생했습니다.

LIBCD.lib(asin.obj) : error LNK2005: _asin already defined in msvcrtd.lib(MSVCRTD.dll)

Project -> Setting -> Link탭에서

Ignore all default libraries 옵션을 적용시켜서 해결 했습니다.


사용자 삽입 이미지



* LIBCMTD.lib 중복 선언에러(LNK2005)  : CRT (* 표준 C/C++ 런타임 라이브러리 참조)

에러원인 :
CRT 라이브러리가 MFC 라이브러리 전에 링크되면 LNK2005 오류가 발생한다.
MFC나 VC관련 라이브러리와 동일한 함수가 CRT에도 존재하기 때문에 발생되는 에러이다.

에러메시지 :
nafxcwd.lib(afxmem.obj) : 오류 LNK2005:"void * __cdecl operator new(unsigned int)"(??2@YAPAXI@Z)이(가) LIBCMTD.lib(new.obj)에 이미 정의되어 있습니다.

해결방법 :
CRT 라이브러리 링크 무시.
VC98 : Project -> Setting 메뉴에 Link탭에서  프로젝트 옵션에 /nodefaultlib:"libcmtd.lib" 를 아무데나 삽입

.NET : Linker -> Input 메뉴에서 IgnoreSpecific Library에 libcmtd.lib 입력
링커 명령줄은 /NOD:libcmtd.lib 명령과 동일


링크 순서를 확인하는 방법 :
1. Project 메뉴에서 Settings을 눌러 Project Settings 대화 상자를 엽니다.
2. Settings For 뷰에서 링크 오류가 발생하는 프로젝트 구성을 선택(강조 표시)합니다.
3. Link 탭을 누릅니다.
4. Project Options 대화 상자에 다음을 입력합니다. /verbose:lib
5. 프로젝트를 다시 빌드. 링크하는 과정에서 출력 창에 라이브러리가 표시됩니다.

참고 싸이트 : www.naver.com
환경 : XP pro, Visual C++ 6.0


Leave a comment

a ^= b;
b ^= a;
a ^= b;

a = a + b;
b = a - b;
a = a - b;


Leave a comment

[디버깅] 에러 보고 LINK2001

Posted 2007/05/02 23:12, Filed under: Code Factory

릴리즈 모드에서 inline으로 선언된 함수가 LINK2001 에러를 발생시켰습니다.

inline 키워드를 삭제하니 에러가 발생되지 않았습니다. -_-??

Leave a comment


Recent Posts

  1. [참고자료] 모니터 해상도 도표
  2. [런타임에러] Expression: map/set it..
  3. *. 플러그인 랩퍼 사용하기 ( 3DS MAX..
  4. *. 스키닝 오프셋 벡터 [Offset Vecto..
  5. November 2007 DirectX SDK News

Recent Comments

  1. 관리자만 볼 수 있는 댓글입니다. 06/24

Recent Trackbacks

Calendar

«   2009/11   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

  1. Cafe24
  2. ForTheProgramming
  3. Tatter Tools
  4. 근석이
  5. 진호네

Site Stats

TOTAL 14477 HIT
TODAY 4 HIT
YESTERDAY 16 HIT
Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.