c++ - C++/LabVIEW互操作: error extracting data from LabVIEW array/unexpected type conversion in function parameter

标签 c++ interop compiler-errors type-conversion labview

我正在使用Cluebat-man's LabVIEW-C++ array interoperability class,,并且从数组中提取数据时遇到错误。或者,更确切地说,数据提取似乎成功,但是当我稍后尝试使用数据时,构建失败。

(上下文:该程序旨在实现Manjunath等人的对等组过滤;该函数旨在提取图像的色相平面。我可以肯定的是,除了它的声明外,特定功能不是问题。参数,因为当我尝试使用getHuePlane()的结果时,该问题稍后会在程序中出现)

#ifndef IO_TYPE //Normal arrays or LabVIEW?
#define I_TYPE  /* int* */ CLvArrayHandlePtr<unsigned __int32, 2>
#define O_TYPE /* int* */ CLvArrayHandlePtr<unsigned __int8, 2>
#define IO_TYPE
#endif

#ifndef USING_LABVIEW_DEFINED
#define USING_LABVIEW //remove if not
#define USING_LABVIEW_DEFINED
#endif

提取和函数调用:
#include "LvArrayIndexer.h"
#include "LvArrayTemplate.h"

O_TYPE pgf(I_TYPE HSLimage, int width, int height, int halfWindowSize, int noiseThreshold) {
#ifdef USING_LABVIEW
    size_t size[2] = {width, height};
    HSLimage.Resize(size);
    CLvArrayIndexer<unsigned __int32, 2 > baseImgIndexer(HSLimage);

    CLvArrayHandlePtr<unsigned __int8, 2 > hueImage;
    hueImage.Resize(size);
    CLvArrayIndexer<unsigned __int8, 2 > hueImgIndexer(hueImage);

    int LvImageData[width][height];
#else
    int hueImage[width][height];
#endif
    int hueImageData[width][height];
    int windowSize = 2 * halfWindowSize - 1;
    int windowLength = windowSize * windowSize;
    int window[windowSize][windowSize];
    int flattenedWindow[windowLength];
    vector<int> peerGroup;
    int currentValue;

#ifdef USING_LABVIEW
    for (int x = 0; x < width; x++)
        for (int y = 0; y < height; y++)
            LvImageData[x][y] = baseImgIndexer[x][y];

    hueImageData = getHuePlane(LvImageData, width, height);
#else
    hueImageData = getHuePlane(HSLimage, width, height);
#endif
//Function continues
}

函数定义:
int* getHuePlane(int* HSLimage, int width, int height) {
    int hueImage[width][height];
    double calcValue;

    /*Get hue plane
     *AL HU SA LU ->AL HU.SA LU -> AL HUF
     *AL HU -> AL.HU -> 0.HU -> HU
     */
    for (int x = 0; x < width; x++) {
        for (int y = 0; y < height; y++) {
            calcValue = int(double(HSLimage[x][y]) / 65536); //A-H-S-L; removes S-L
            calcValue = (calcValue / 256) - int(calcValue / 256);
            calcValue = calcValue * 256;
            hueImage[x][y] = int(calcValue);
        }
    }

    return hueImage;
}

错误是:
pgf.cpp:88:58: error: cannot convert 'int (*)[(((unsigned int)(((int)height) + -0x000000001)) + 1)]' to 'int*' for argument '1' to 'int* getHuePlane(int*, int, int)'

系统信息:
  • IDE:Netbeans 7.1
  • 编译器:MinGW(gcc v4.6.2)
  • Make:GNU make 3.79.1
  • 系统:Windows 7版本6.1
  • 最佳答案

    我猜错误在此行上:

    hueImageData = getHuePlane(LvImageData, width, height);
    

    原因是由于类型不匹配:LvImageData被定义为int [][],而getHuePlane需要int *

    另外,您还应该在此行上得到一个错误(在getHuePlane中):
    calcValue = int(double(HSLimage[x][y]) / 65536); //A-H-S-L; removes S-L
    

    这是因为,当您尝试以HSLimage(或int *作为参数类型)访问函数时,函数中的int [][]int *[]

    关于c++ - C++/LabVIEW互操作: error extracting data from LabVIEW array/unexpected type conversion in function parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8888646/

    相关文章:

    c++ - 在CListCtrl中搜索项目

    c++ - 识别自动生成的成员函数

    c# - 为 VBA 添加引用对话框公开时,为 .NET (COM) tlb 库选择自定义引用名称

    java - 类不再被正确识别

    c++ - 使用作用域对象实现 "execute-around"习惯用法是否滥用?

    c++ - 复制构造函数,赋值运算符C++

    c# - Word 2007 Automation - 图像在打印时显示为黑框

    c# - 在 DllImport 中指定 Charset.Unicode 是否分配字符串?

    compiler-errors - 为什么 'dsgaudiko'有效的PHP?

    javascript - 未捕获的语法错误 : Unexpected token return - still no answer?