体系结构x86_64的未定义符号:使用头文件中定义的结构

kot*_*oko 1 c++ oop xcode

我正在使用xcode 4.2来构建这个简单的程序.我意识到这个错误有很多帖子,但我没有找到任何回答我的问题.
我收到一个我不明白的错误.
这是编译输出:

Ld/Users/kotoko/Library/Developer/Xcode/DerivedData/stw-gyleohvghcrywgcqkihhkkkqqnqnl/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-gyleohvghcrywgcqkihhkkkqqqnqn/Build/Products/Debug -filelist /用户/ 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 /用户/ KOTOKO /库/开发商/ Xcode中/ DerivedData/STW-gyleohvghcrywgcqkihhkkkqeqnl /编译/产品/调试/ STW

架构x86_64的未定义符号:"ClosetItem :: lc",引自:ClosetItem中的ClosetItem :: ClosetItem(int)ClosetItem.o中的ClosetItem :: ClosetItem(int)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();
}
Run Code Online (Sandbox Code Playgroud)

有人能指出我的问题吗?

Luc*_*ore 8

您尚未初始化您的static会员:

class ClosetItem{

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


protected:
    static LeakChecker lc;  // <-- uninitialized
};
Run Code Online (Sandbox Code Playgroud)

您需要在实现文件中初始化它:

//ClosetItem.cpp
LeakChecker ClosetItem::lc; // <-- definition
Run Code Online (Sandbox Code Playgroud)