数组引用参数的长度由原型中的另一个参数描述

时间:2016-07-19 00:34:57

标签: c++ function parameters

好的,我有一个奇怪的问题。我有一个包含变量screenwidthscreenheight的屏幕类以及一个长度为zbuffer的{​​{1}}。当我想将screen.screenwidth * screen.screenheight传递给函数时,我会这样做,

zbuffer

它有效。但是在.h文件的播放器类中,我定义了一个像这样的函数

void func(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]);

没问题。然后在.cpp文件中我有这个

void rendervisiblehunks(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]);

函数参数是复制和粘贴的,但它仍然表示它不匹配.h文件中的任何函数声明。我尝试在两个文件中将void Player:: rendervisiblehunks(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]){ } 长度更改为100,但它与原始zbuffers长度无关。 为什么这适用于其他功能,但不适用于此功能。为什么它在.h文件中工作,但不在.cpp文件中工作。有关将函数参数用作另一个参数的数组大小的规则是什么? (事实证明,你不能这样做。)

我复制并粘贴在其​​工作的其他功能中。

screen.screenwidth*screen.screenheight

我无法相信我之前没有想到这一点,但我会将void render(Triangle& triangle,Player& camera,Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]); 放入屏幕类

1 个答案:

答案 0 :(得分:1)

您不能使用一个参数值来定义另一个参数值。您必须单独传递值:

class Screen
{
    //...
    int screenwidth;
    int screenheight;
    double *zbuffer;
    //...
};

class Player
{
public:
    //...
    void rendervisiblehunks(Screen& screen, double *zbuffer, int numInBuffer);
    //...
};

...

void Player::rendervisiblehunks(Screen& screen, double *zbuffer, int numInBuffer)
{
    // use zbuffer up to numInBuffer elements as needed...
}

Screen screen;
Player p;
...
p.rendervisiblehunks(screen, screen.zbuffer, screen.screenwidth * screen.screenheight);

可以通过删除冗余参数来简化:

class Screen
{
    //...
    int screenwidth;
    int screenheight;
    std::vector<double> zbuffer;
    //...
};

class Player
{
public:
    void rendervisiblehunks(Screen& screen);
};

...

void Player::rendervisiblehunks(Screen& screen)
{
    // use screen.zbuffer up to screen.zbuffer.size() elements as needed...
}

Screen screen;
Player p;
...
p.rendervisiblehunks(screen);