У меня проблема с компиляцией кода с помощью компилятора 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)
{}
};
Заранее спасибо.
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__.