1

この単純なプログラムを構築するために、xcode 4.2 を使用しています。このエラーに関する投稿がたくさんあることに気付きましたが、私の問題を解決するものは見つかりませんでした。
よくわからないエラーが出ます。
コンパイル出力は次のとおりです。

Ld /Users/kotoko/Library/Developer/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqeqnl/Build/Products/Debug/stw normal x86_64 cd /Users/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/Users/kotoko/Library/Developer/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqeqnl/Build/Products/Debug -F/Users/kotoko/Library/Developer/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqeqnl/Build/Products/Debug -filelist / Users/kotoko/Library/Developer/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqeqnl/Build/Intermediates/stw.build/Debug/stw.build/Objects-normal/x86_64/stw.LinkFileList -mmacosx-version-min=10.6 -o / Users/kotoko/Library/Developer/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqeqnl/Build/Products/Debug/stw

アーキテクチャ x86_64 の未定義シンボル: "ClosetItem::lc"、次から参照: ClosetItem::ClosetItem(int)in ClosetItem.o ClosetItem::ClosetItem(int)in ClosetItem.o ld: アーキテクチャ 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();
}

誰でも私に問題を指摘できますか?

4

3 に答える 3

8

メンバーを初期化していませんstatic:

class ClosetItem{

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


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

実装ファイルで初期化する必要があります。

//ClosetItem.cpp
LeakChecker ClosetItem::lc; // <-- definition
于 2012-04-24T12:57:09.230 に答える
2

静的な LeakChecker 変数を宣言しましたが、実装する必要があります。C++ ファイルに次を追加します。

LeakChecker ClosetItem::lc;

于 2012-04-24T12:57:35.187 に答える
1

lc実際には静的オブジェクトを定義していません。次のようなものが必要です:

LeakChecker ClosetItem::lc;
于 2012-04-24T12:58:59.257 に答える