我正在使用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();
}
有人能指出我的问题吗?
答案 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;