2017-04-07 54 views
0

返回二维数组指针我有一个类中调用Engine持有并返回一个缓冲区,像这样:

template <int width, int height, int meshSize> 
class Engine { 
    public: 
     byte buffers[2][width][height]; 
     byte fBuffer = 0; 
     byte** getBuffer() { 
      return buffers[fBuffer]; 
     }; 
} 

,我想通过我的主值循环,但我不能似乎得到它的工作..

byte* buff; 

// main 
buff = engine->getBuffer(); 

for (int x = 0; x < 320; x++) { 
    for (int y = 0; y < 320; y++) { 
     if (buff[x][y] != NULL) { 
      Serial.println(buff[x][y]); 
     } 
     // lcd.drawPixel(x, y, RGB(buff[x][y], buff[x][y], buff[x][y])); 
    } 
} 

星号和/或括号的什么组合将工作?

+0

我不明白'fBuffer'声明。虽然数组衰减为指针,但数组不会衰减为指向指针的指针。 – aschepler

+0

对不起!我添加了缺失的行。它只是一个包含当前'前端'缓冲区索引的'byte' –

回答

0

您应该返回对数组的引用,而不是指针。我还建议为只读操作提供const过载getBuffer

template <int width, int height, int meshSize> 
class Engine { 
public: 
    using BufferType = byte[width][height]; 

    BufferType const& getBuffer() const { 
     return buffers[fBuffer]; 
    }; 

    BufferType& getBuffer() { 
     return buffers[fBuffer]; 
    }; 

private: 
    BufferType buffers[2]; 
    byte fBuffer = 0; 
}; 

可以使用auto为简洁调用getBuffer时,推断该类型:

auto& buff = engine->getBuffer(); // reference to the buffer 
+0

感谢您的回应!这给我一个整体组误差:'Engine.h:18:9:错误:预期“之前BufferType 使用BufferType =字节[宽度] [高度] Engine.h嵌套名称说明符:18:9:错误:在类作用域的非成员使用声明和更多..我应该提到这是用Visual Micro编译的Arduino Uno。 –

+0

@NathanPrins看起来你正在编译C++ 98。也许你可以查看这篇文章,了解如何编译C++ 11(甚至更好,C++ 14)。 http://stackoverflow.com/questions/16224746/how-to-use-c11-to-program-the-arduino或者,你可以使用C++ 98的这种语法(尽管我强烈建议不要使用一个版本的几乎20年过时的C++)'typedef byte BufferType [width] [height]' –

+0

只需等待C++ 2143中的心灵感应编译器即可。 – user4581301