Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ ibm i 7.3上初始化constexpr编译时数组时出错_C++_Ibm Midrange_Constexpr - Fatal编程技术网

C++ ibm i 7.3上初始化constexpr编译时数组时出错

C++ ibm i 7.3上初始化constexpr编译时数组时出错,c++,ibm-midrange,constexpr,C++,Ibm Midrange,Constexpr,由于IBMi上的特定IO过程,需要使用显示文件字段IO 如下所示,我们需要编译时结构来显示文件值 在查看了constexpr之后,我决定尝试一些cpp+模板解决方案 我的案例的最终代码如下所示: #include "MYSRC/MODINCH" template <int N> constexpr_string<N> make_constexpr_string(const char(&a)[N]) { // Provide a function temp

由于IBMi上的特定IO过程,需要使用显示文件字段IO

如下所示,我们需要编译时结构来显示文件值

在查看了
constexpr
之后,我决定尝试一些cpp+模板解决方案

我的案例的最终代码如下所示:

#include "MYSRC/MODINCH"

template <int N>
constexpr_string<N> make_constexpr_string(const char(&a)[N]) {
    // Provide a function template to deduce N           ^ right here
return constexpr_string<N>(a);
    //                     ^ Forward the parameter to the class template.
};
int main(int argc, char** argv)
{
auto test1 = make_constexpr_string("blabla");
constexpr_string<7> test("blabla");
return 0;
}
MYSRC/MYMOD.CPP

#include "MYSRC/MODINCH"

template <int N>
constexpr_string<N> make_constexpr_string(const char(&a)[N]) {
    // Provide a function template to deduce N           ^ right here
return constexpr_string<N>(a);
    //                     ^ Forward the parameter to the class template.
};
int main(int argc, char** argv)
{
    return 0;
}
对于
char数据_N]
std::tr1::数组数据

但是,当我尝试像这样填充
constexpr\u string
的实例时:

#include "MYSRC/MODINCH"

template <int N>
constexpr_string<N> make_constexpr_string(const char(&a)[N]) {
    // Provide a function template to deduce N           ^ right here
return constexpr_string<N>(a);
    //                     ^ Forward the parameter to the class template.
};
int main(int argc, char** argv)
{
auto test1 = make_constexpr_string("blabla");
constexpr_string<7> test("blabla");
return 0;
}
#包括“MYSRC/MODINCH”
模板
constexpr\u字符串生成constexpr\u字符串(const char(&a)[N]){
//在此处提供一个函数模板来推导N^
返回constexpr_字符串(a);
//^将参数转发到类模板。
};
int main(int argc,字符**argv)
{
自动测试1=生成常量字符串(“blabla”);
constexpr_字符串测试(“blabla”);
返回0;
}
错误立即导致编译失败,并显示此消息
CZP0063(30)文本“constexpr\u字符串”是意外的。
位于ctor行的右侧。对我来说,在这种情况下,编译器似乎无法确定
constexpr
关键字,但为什么呢

我是否在代码中的某个地方出错了,或者这种用法目前不受支持


是ibm编译器支持的功能,ibm XLC++尽可能支持
constexpr
,我可以从给定的表中扣除。

如果它被标记为
ibm midrange
,我不确定ibm XLC++的功能集是否是正确的参考。我想你应该用它来代替。特别是如果您想使用C++0x功能(尚未完全支持),则需要使用
LANGLVL(*EXTENDED0X)
进行编译


有关更多信息,请参见有关支持ILE C++0x语言扩展的信息。

我无法在ibm中端系统上验证这一点,因为我无法访问那里的CPP编译器,但我认为我发现了您的问题:

#include "MYSRC/MODINCH"
template <int N>
constexpr_string<N> make_constexpr_string;  // <------ You are missing this semicolon
...
int main(int argc, char** argv)
{
    auto test1 = make_constexpr_string("blabla");
    constexpr_string<7> test("blabla");
    return 0;
}
#包括“MYSRC/MODINCH”
模板

constexpr_string make_constexpr_string;//嗯,我的意思是,
main
部分除了
constexpr\u字符串的声明
valriables之外没有被碰过。。。因此没有分号遗漏。顺便说一句,我会更新我的问题的完整来源啊我的错误。我误解了你的
。我假设您正在尝试前向声明模板表达式(我不确定是否支持该表达式)。MYMOD.CPP编译而不是真正的main的原因是MYMOD.CPP从不尝试实例化
make\u constexpr\u string
的实例。如果模板从未被使用过,编译器就没有足够的信息来进行最粗略的检查,这就是问题所在。它只是暗示IBM IBM C++编译器在IBM DOCSSERY中不保证遵守<代码> COSTEXPROP/CODE >,但不使用<代码> LangLVL(*扩展)< />代码或其他任何编译,我不确定我是否理解您的评论。您是否尝试使用
LANGLVL(*EXTENDED0X)
编译此文件?根据给定的链接,除非通过此编译标志专门启用,否则不支持通用常量表达式(
constexpr
)。这一点在使用的构建命令的问题中得到了正确的说明:
CRTCPPMOD模块(QTEMP/MYMOD)SRCFILE(MYLIB/MYSRC)SRCMBR(MYMOD)OPTIMIZE(40)DBGVIEW(*ALL)LANGLVL(*EXTENDED0X)
对于我在这方面的回答没有什么帮助,我深表歉意。我一直在旅行,试图尽我所能帮助解决问题,但我没有像平时那样仔细考虑这个问题。不幸的是,IBM似乎在支持这一标准方面还有一些工作要做。在这一点上,除了将其报告为缺陷之外,没有什么可做的。
#include "MYSRC/MODINCH"
template <int N>
constexpr_string<N> make_constexpr_string;  // <------ You are missing this semicolon
...
int main(int argc, char** argv)
{
    auto test1 = make_constexpr_string("blabla");
    constexpr_string<7> test("blabla");
    return 0;
}