2012-04-24 13 views
1

私はこの単純なプログラムを構築するためにxcode 4.2を使用しています。私はこのエラーに多くのポストがあることを認識していますが、私は自分の問題に答えるものは見つかりませんでした。
私は理解していないエラーが発生しています。/アーキテクチャの定義されていないシンボルx86_64:ヘッダファイルに定義された構造体を使用

LD /ユーザ/ KOTOKO /ライブラリ/開発/ Xcodeの/ 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/Users/kotoko /ライブラリ/開発者/ Xcode/DerivedData/stw-gyle ohvghcrywgcqkihhkkkqeqnl /ビルド/製品/デバッグ -filelist /Users/kotoko/Library/Developer/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqeqnl/Build/Intermediates/stw.build/Debug/stw.build/Objects-normal/x86_64/stw.LinkFileList -mmacosxバージョン分= 10.6 -o /ユーザ/ KOTOKO /ライブラリ/開発/ Xcodeの/ DerivedData/STW-gyleohvghcrywgcqkihhkkkqeqnl /ビルドします/製品/デバッグ/ STWアーキテクチャはx86_64用

未定義シンボル:「ClosetItem :: LC 」 から参照:ClosetItem.oのLDに ClosetItem :: ClosetItem(INT)でClosetItem.o ClosetItem :: ClosetItem(INT):記号(S)アーキテクチャx86_64でのcollect2は見つかりません:LDは

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

これは、見た目ではコンパイラの問題ではなく、リンカーです。 –

答えて

8

あなたのstaticメンバーを初期化していません。あなたのC++ではファイルが追加:

LeakChecker ClosetItem::lc;

+1

私はとても馬鹿だと感じています... XD ありがとうとにかく – kotoko

1

は、あなたが実際にlc静的オブジェクトを定義していませんでした。

LeakChecker ClosetItem::lc; 
関連する問題