1

AIX OS で xlC_r コンパイラーを使用したコードのコンパイルに問題があります。問題の原因となっているコードを以下に添付しました。MS Windows で Microsoft コンパイラを使用してコードをコンパイルしようとしましたが、Linux で gcc を使用してコンパイルしたところ、すべて正常に動作しました。私が得るコンパイラエラーは次のとおりです。

"...../ABC.h", line 12.22: 1540-0063 (S) テキスト "<" は予期しないものです。

インターネットを検索したところ、いくつかのリソース (リンクリンク) が見つかりましたが、ソリューションをコードに統合する方法がわかりません。考えられる解決策の 1 つは、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

0

shared_ptr は TR1 からのものであるため、その名前空間から使用する必要があります

std::shared_ptr mpRV を変更します。std::tr1::shared_ptr mpRV へ;

-D__IBMCPP_TR1__ でコンパイル

于 2015-08-26T11:45:50.563 に答える