使用 Xlc_r IBM 编译器编译时出现意外文本“<”
The text "<" is unexpected when compiling with Xlc_r IBM compiler
我在 AIX OS 上使用 xlC_r 编译器编译代码时遇到问题。我在下面附上了导致问题的代码。我试图编译
使用 Microsoft 编译器在 MS Windows 上编写代码,并使用 gcc 在 Linux 下编译它,一切正常。我得到的编译器错误如下:
"...../ABC.h", line 12.22: 1540-0063 (S) The text "<" is unexpected.
我在互联网上搜索并找到了一些资源 (link and link),但我不知道如何将解决方案集成到我的代码中。一种可能的解决方案
将删除 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)
{}
};
提前致谢。
xlC 不符合 C++11。 Shared_ptr 在 std:: 命名空间中不可用。它确实有针对 'experimental' 功能的特殊名称空间,shared_ptr 可能在那里。这些实验在 std::tr1 中,您需要使用 __ IBMCPP_TR1__.
进行编译
shared_ptr 来自 TR1,因此应该从该命名空间使用它
改变
std::shared_ptr mpRV;
到
std::tr1::shared_ptr mpRV;
编译为
-D__IBMCPP_TR1__
我在 AIX OS 上使用 xlC_r 编译器编译代码时遇到问题。我在下面附上了导致问题的代码。我试图编译 使用 Microsoft 编译器在 MS Windows 上编写代码,并使用 gcc 在 Linux 下编译它,一切正常。我得到的编译器错误如下:
"...../ABC.h", line 12.22: 1540-0063 (S) The text "<" is unexpected.
我在互联网上搜索并找到了一些资源 (link and link),但我不知道如何将解决方案集成到我的代码中。一种可能的解决方案 将删除 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)
{}
};
提前致谢。
xlC 不符合 C++11。 Shared_ptr 在 std:: 命名空间中不可用。它确实有针对 'experimental' 功能的特殊名称空间,shared_ptr 可能在那里。这些实验在 std::tr1 中,您需要使用 __ IBMCPP_TR1__.
进行编译shared_ptr 来自 TR1,因此应该从该命名空间使用它
改变 std::shared_ptr mpRV; 到 std::tr1::shared_ptr mpRV;
编译为 -D__IBMCPP_TR1__