今天在搞毕设时,运行网上的一个SDK,出现如下的错误提示
网上查了下,是这个错误是由于vs2010全局命名空间中找不到要导出的STL类。修改很简单:将需要导出的STL类从自定义的类中移动到全局命名空间中。
template class __declspec(dllexport) std::allocator<std::string>;
template class __declspec(dllexport) std::vector<std::string, std::allocator<string>>;
template class __declspec(dllexport) std::allocator<SaveInfo>;
template class __declspec(dllexport) std::vector<SaveInfo>;
template class __declspec(dllexport) std::allocator<int>;
template class __declspec(dllexport) std::vector<int, std::allocator<int>>;
class __declspec(dllexport) SingleObjectDetection
{
public:
//template class __declspec(dllexport) std::allocator<std::string>;
//
//
SingleObjectDetection(void);
~SingleObjectDetection(void);
int start(std::string path);
int getOneFrame(FrameInfo& param);
bool pushOneInfo(const SaveInfo& param);
bool saveInfoToFile(const std::string savePath,int EvaluateType);
void stop();
std::string directoryPath_;
bool isInit_;
private:
bool isInit() const;
private:
std::vector<std::string> imagePathSet_;
int imagePathSetIndex_;
std::vector<SaveInfo> saveInfoSet_;
std::vector<int> randomSet_;
};
将模板实例化部分的放置于全局作用空间,通过编译。
VS2008中不会认为第一种代码是错误,从VS2010开始才将它作为错误。