我在AIX OS上使用xlC_r编译器编译代码时遇到问题。我在下面附上了导致问题的代码。我试过编译了 使用microsoft编译器在MS Windows上编写代码,并使用gcc在Linux下编译它,一切正常。我得到的编译器错误如下:
" ..... / ABC.h",第12.22行:1540-0063(S)文本"<"出人意料。
我搜索了互联网,发现了一些资源(link和link),我不知道如何将解决方案集成到我的代码中。一种可能的解决方 将删除shared_ptr并只有指针值,但我不喜欢自己管理指针的删除。我非常感谢任何帮助。
ABC.h
#ifndef ABC_H
#define ABC_H
#include <vector>
#include <memory>
template<class SR_TYPE, class SM_TYPE>
class ABC {
private:
std::shared_ptr<SR_TYPE> mpRV;
std::vector<SM_TYPE> mMsgs;
public:
ABC(void);
ABC(SR_TYPE* pReturnValue);
virtual ~ABC(void);
}; // ABC
template<class SR_TYPE, class SM_TYPE>
ABC<SR_TYPE, SM_TYPE>::ABC(void) {
}
template<class SR_TYPE, class SM_TYPE>
ABC<SR_TYPE, SM_TYPE>::ABC(SR_TYPE* pReturnValue) {
mpRV.reset(pReturnValue);
}
template<class SR_TYPE, class SM_TYPE>
ABC<SR_TYPE, SM_TYPE>::~ABC(void) {
}
#endif // ABC_H
ABC.cpp
#include "ABC.h"
class ABCExtended : public ABC<int, std::string> {
ABCExtended() :
ABC<int, std::string>()
{}
ABCExtended(int* pReturnValue) :
ABC<int, std::string>(pReturnValue)
{}
};
提前致谢。
答案 0 :(得分:1)
xlC不符合C ++ 11。在std :: namespace中没有shared_ptr。它确实具有“实验”功能的特殊命名空间,而shared_ptr可能就在那里。那些实践是在std :: tr1中,你需要用__ IBMCPP_TR1 __进行编译。
答案 1 :(得分:0)
shared_ptr来自TR1,因此应该从该命名空间使用
变化 std :: shared_ptr mpRV; 至 std :: tr1 :: shared_ptr mpRV;
编译 -D__IBMCPP_TR1 __