1

我在 AIX OS 上使用 xlC_r 编译器编译代码时遇到问题。我在下面附上了导致问题的代码。我曾尝试使用 microsoft 编译器在 MS Windows 上编译代码,并在 Linux 下使用 gcc 编译它,一切正常。我得到的编译器错误如下:

“...../ABC.h”,第 12.22 行:1540-0063 (S) 文本“<”是意外的。

我搜索了互联网,找到了一些资源(链接链接),我不知道如何将解决方案集成到我的代码中。一种可能的解决方案是删除 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)
   {}
};

提前致谢。

4

2 回答 2

1

xlC 不符合 C++11。Shared_ptr 在 std:: 命名空间中不可用。它确实具有用于“实验”功能的特殊命名空间,并且 shared_ptr 可能在那里。这些实验在 std::tr1 中,您需要使用 __ IBMCPP_TR1__ 进行编译。

于 2015-08-25T18:21:05.060 回答
0

shared_ptr 来自 TR1,因此应该从该命名空间中使用它

更改 std::shared_ptr mpRV;到 std::tr1::shared_ptr mpRV;

使用 -D__IBMCPP_TR1__ 编译

于 2015-08-26T11:45:50.563 回答