Текст "<" является неожиданным при компиляции с помощью компилятора Xlc_r IBM

У меня проблема с компиляцией кода с помощью компилятора xlC_r в ОС AIX. Я приложил свой код ниже, который вызывает проблему. Я попытался скомпилировать код на MS Windows с помощью компилятора Microsoft, а также скомпилировал его под 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)
   {}
};

Заранее спасибо.

2 ответа

Решение

shared_ptr из TR1, поэтому его следует использовать из этого пространства имен

изменить std::shared_ptr mpRV; в std::tr1::shared_ptr mpRV;

Скомпилировать с -D__IBMCPP_TR1__

xlC не соответствует C++11. Shared_ptr недоступен в std:: namespace. У него есть специальное пространство имен для "экспериментальных" функций, и shared_ptr может быть там. Эти эксперименты находятся в std::tr1, и вам нужно скомпилировать с __ IBMCPP_TR1__.

Другие вопросы по тегам