C++ 编译c+时架构x86_64的未定义符号+;
我不断地犯错误,这让我发疯C++ 编译c+时架构x86_64的未定义符号+;,c++,compiler-errors,C++,Compiler Errors,我不断地犯错误,这让我发疯 Undefined symbols for architecture x86_64: "SSResourcesDepot::_sharedInstance", referenced from: SSResourcesDepot::sharedInstance() in SSResourcesDepot.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command
Undefined symbols for architecture x86_64:
"SSResourcesDepot::_sharedInstance", referenced from:
SSResourcesDepot::sharedInstance() in SSResourcesDepot.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我的代码如下所示:
#ifndef SolarSystem_SSResourcesDepot_h
#define SolarSystem_SSResourcesDepot_h
#include "SSResource.h"
/* SSResourcesDepot is implemented as a Singleton Depot that keeps track of all
* requested Resource objects, and avoid loading them twice in memory. */
class SSResourcesDepot {
SSResourcesDepot() {};
SSResourcesDepot(SSResourcesDepot const&){};
SSResourcesDepot& operator=(SSResourcesDepot const&){};
static SSResourcesDepot* _sharedInstance;
SSResource* _search(std::string resourceName);
SSResource* _load(std::string resourceName);
public:
static SSResourcesDepot* sharedInstance();
SSResource* requestResource(std::string resourceName);
};
#endif
以及:
#包括
#包括“SSResourcesDepot.h”
#pragma标记公共方法
SSResourcesDepot*SSResourcesDepot::sharedInstance(){
如果(SSResourcesDepot::_sharedInstance==0){
SSResourcesDepot::_sharedInstance=new SSResourcesDepot();
}
返回SSResourcesDepot::\u共享状态;
}
SSResource*SSResourcesDepot::requestResource(std::string resourceName){
SSResource*resource=此->搜索(resourceName);
如果(resource==NULL)resource=this->\u加载(resourceName);
返回资源;
}
#pragma标记私有方法
SSResource*SSResourcesDepot::\u搜索(标准::字符串资源名称){
返回NULL;
}
SSResource*SSResourcesDepot::_加载(标准::字符串资源名称){
返回NULL;
}
对我来说,它似乎完全可以运行,但Apple-O-Matcher一直在抱怨,而且它不允许我编译…:-
提前谢谢 您没有初始化您的
静态
成员
加
到您的实现文件。thaks,它成功了。。。稍微调整一下:
SSResourcesDepot*SSResourcesDepot::\u sharedInstance=NULL代码>(命名空间位于错误的位置!)
#include <iostream>
#include "SSResourcesDepot.h"
#pragma mark Public methods
SSResourcesDepot* SSResourcesDepot::sharedInstance() {
if (SSResourcesDepot::_sharedInstance == 0) {
SSResourcesDepot::_sharedInstance = new SSResourcesDepot();
}
return SSResourcesDepot::_sharedInstance;
}
SSResource* SSResourcesDepot::requestResource(std::string resourceName) {
SSResource *resource = this->_search(resourceName);
if (resource == NULL) resource = this->_load(resourceName);
return resource;
}
#pragma mark Private methods
SSResource* SSResourcesDepot::_search(std::string resourceName) {
return NULL;
}
SSResource* SSResourcesDepot::_load(std::string resourceName) {
return NULL;
}
SSResourcesDepot* SSResourcesDepot::_sharedInstance = NULL;