2012-04-24 4 views
1

이 간단한 프로그램을 작성하기 위해 xcode 4.2를 사용하고 있습니다. 이 오류에 많은 게시물이 있다는 것을 알고 있지만 내 문제에 대한 답변을 찾지 못했습니다.
내가 이해하지 못하는 오류가 발생했습니다.아키텍처에 대한 정의되지 않은 기호 x86_64 : 헤더 파일에 정의 된 구조 사용

LD/사용자/kotoko/라이브러리/개발자/엑스 코드/DerivedData/STW-gyleohvghcrywgcqkihhkkkqeqnl/제품/디버그/STW 일반 x86_64에 CD/사용자/kotoko/projectos// 제작 :
여기 는 컴파일 출력 somethingToWear/stw_v6_xcode/STW 에서는 setenv MACOSX_DEPLOYMENT_TARGET 10.6 /Developer/usr/bin/llvm-g++-4.2 -arch x86_64에 -isysroot /Developer/SDKs/MacOSX10.6.sdk -

L/사용자/kotoko/라이브러리/개발자/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqeqnl/빌드/제품/디버그 -F/사용자/kotoko/라이브러리/개발자/Xcode/DerivedData/stw-gyle ohvghcrywgcqkihhkkkqeqnl/빌드/제품/디버그 -filelist/사용자/kotoko/라이브러리/개발자/Xcode/데비안 데이터 건축 x86_64에 대한 -mmacosx 버전 - 분 = 10.6 -o/사용자/kotoko/라이브러리/개발자/엑스 코드/DerivedData/STW-gyleohvghcrywgcqkihhkkkqeqnl/구축/제품/디버그/STW

정의되지 않은 심볼 : "ClosetItem :: LC " 은에서 참조 : ClosetItem.o에 ClosetItem :: ClosetItem (INT) ClosetItem :: ClosetItem ClosetItem.o의 LD에서 (INT) : 기호 (들) 아키텍처 x86_64에의 collect2 찾을 수 없습니다 : 신분증 1 종료 상태

를 반환
여기

는 (심지어이를 호출하지 않습니다 주 파일이 지금 객체) 코드입니다 :

// 
// ClosetItem.h 
// stw 
// 

#ifndef stw_ClosetItem_h 
#define stw_ClosetItem_h 

#include <iostream> 

class LeakChecker { 
    int count; 
public: 
    LeakChecker() : count(0) {} 
    void print() { 
     std::cout << count << std::endl; 
    } 
    ~LeakChecker() { print(); } 
    void operator++(int) { count++; } 
    void operator--(int) { count--; } 
}; 

class ClosetItem{ 

public: 
    ClosetItem(int identifier); 
    virtual ~ClosetItem() {}; 


protected: 
    static LeakChecker lc; 
}; 
#endif 
// 
// ClosetItem.cpp 
// stw 
// 

#include "ClosetItem.h" 
#include <iostream> 

ClosetItem::ClosetItem(int identifier){ 
    lc++; 
    std::cout<<"ClosetItem #"; 
    lc.print(); 
} 

사람이 문제를 제발 지적 할 수 있습니까?

class ClosetItem{ 

public: 
    ClosetItem(int identifier); 
    virtual ~ClosetItem() {}; 


protected: 
    static LeakChecker lc; // <-- uninitialized 
}; 

당신은 구현 파일에 초기화해야합니다 : 당신은 정적 LeakChecker 변수를 선언하지만, 그것을 구현할 필요가있다

//ClosetItem.cpp 
LeakChecker ClosetItem::lc; // <-- definition 
+0

Stictly, 이것은 링커로 보이기보다는 컴파일러 문제입니다. –

답변

8

당신은 당신의 static 멤버를 초기화하지 않았습니다. 당신의 C++에서 파일 추가 :

LeakChecker ClosetItem::lc;

+1

omg, 나는 바보 같다고 느낀다 ... XD 어쨌든 – kotoko

1

당신은 실제로 lc 정적 객체를 정의되지했습니다. 다음과 같은 것이 필요합니다 :

LeakChecker ClosetItem::lc; 
관련 문제