Текст "<" является неожиданным при компиляции с помощью компилятора 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__.