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

时间:2012-04-24 12:55:04

标签: c++ xcode oop

我正在使用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 /用户/ KOTOKO /库/开发商/ Xcode中/ DerivedData / STW-gyleohvghcrywgcqkihhkkkqeqnl /建造/产品/调试   -F /用户/ KOTOKO /库/开发商/ Xcode中/ DerivedData / STW-gyleohvghcrywgcqkihhkkkqeqnl /编译/产品/调试   -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-gyleohvghcrywgcqkihhkkkqqnqnl / Build / Products / Debug / stw

     

架构x86_64的未定义符号:“ClosetItem :: lc”,   引自:         ClosetItem.o中的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();
}

有人能指出我的问题吗?

3 个答案:

答案 0 :(得分:8)

您尚未初始化static成员:

class ClosetItem{

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


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

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

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

答案 1 :(得分:2)

您已声明了静态LeakChecker变量,但需要实现它。在您的c ++文件中添加:

LeakChecker ClosetItem::lc;

答案 2 :(得分:1)

您实际上没有定义lc静态对象。你需要这样的东西:

LeakChecker ClosetItem::lc;