Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.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++;索引语法:两个库使用不同的索引语法:基于0的索引和基于1的索引 如下图所示,我的C++代码中有两个库,它们使用不同的索引语法,一个从0个开始,另一个从1开始。C++代码相当复杂,这种差异对我来说非常麻烦。我想知道以前是否有人遇到过这样的麻烦,是否有什么诀窍。我不知道,例如,有没有一个技巧可以让它们具有相同的索引语法_C++_Math_Dll_Matrix Indexing - Fatal编程技术网

C++;索引语法:两个库使用不同的索引语法:基于0的索引和基于1的索引 如下图所示,我的C++代码中有两个库,它们使用不同的索引语法,一个从0个开始,另一个从1开始。C++代码相当复杂,这种差异对我来说非常麻烦。我想知道以前是否有人遇到过这样的麻烦,是否有什么诀窍。我不知道,例如,有没有一个技巧可以让它们具有相同的索引语法

C++;索引语法:两个库使用不同的索引语法:基于0的索引和基于1的索引 如下图所示,我的C++代码中有两个库,它们使用不同的索引语法,一个从0个开始,另一个从1开始。C++代码相当复杂,这种差异对我来说非常麻烦。我想知道以前是否有人遇到过这样的麻烦,是否有什么诀窍。我不知道,例如,有没有一个技巧可以让它们具有相同的索引语法,c++,math,dll,matrix-indexing,C++,Math,Dll,Matrix Indexing,我用这样的方法解决了这个问题: #define KFULL(row,col) kFull(row+1,col+1) AG_Matrix kFull(4,4,5.0); std::cout<<kFull(1,1)<<'\n';//prints 5 std::cout<<kFull(0,0)<<'\n';//prints garbage value std::cout<<KFULL(0,0)<<'

我用这样的方法解决了这个问题:

#define KFULL(row,col) kFull(row+1,col+1)
    AG_Matrix kFull(4,4,5.0);
    std::cout<<kFull(1,1)<<'\n';//prints 5
    std::cout<<kFull(0,0)<<'\n';//prints garbage value
    std::cout<<KFULL(0,0)<<'\n';//prints 5
    int i=int(0);int j=int(0);
    std::cout<<KFULL(i,j)<<'\n';//prints 5
#定义KFULL(行,列)KFULL(行+1,列+1)
AG_矩阵kFull(4,4,5.0);

std::cout最好修改
AG_矩阵的代码,使其按照您想要的方式运行。这在生成的代码中具有最低的开销

一种解决方法是从
AG_矩阵
派生并重新实现
operator()(int,int)
。然后,您将使用派生类而不是
AG\u矩阵
,当传递给其他需要
AG\u矩阵
的代码时,它可以用来代替
AG\u矩阵

#define KFULL(row, column) KFull(row + 1, column + 1)

KFULL(0, 0) = 4.0

这与语法无关。这是库开发人员做出的一个选择,对此您实在无能为力。除了自己包装它们以提供基于0或1索引的一致性行为之外。@Borgeader谢谢。你说得对。真正的解决办法是尽可能从代码中删除基于1的矩阵类。@DDrmmr目前,我必须同时使用基于0和基于1的库。但我会逐渐摆脱其中一个。谢谢。
AG_Matrix
类是在DLL中实现的,我没有源代码。我想知道我是否仍然可以为
AG_Matrix
类实现一个派生类。@user3853917当然可以。这与它的实施地点无关。在任何情况下,如果这个矩阵类是好的,那么它的大部分实现都在头文件中——当然,索引操作是好的(只需查看头文件)。你能添加一些解释吗?只使用代码的答案没有多大帮助。我们定义了一个宏,可以增加索引。预处理后的KFULL(0,0)行看起来像KFULL(0+1,0+1)。顺便说一句,对不起我的英语,我正在学习。@Kastaneda我测试了你的建议,成功了<代码>#定义KFULL(行,列)KFULL(行+1,列+1)AG#u矩阵KFULL(4,4,5.0);标准::cout