首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组引用参数的长度由prototype中的另一个参数描述

数组引用参数的长度由prototype中的另一个参数描述
EN

Stack Overflow用户
提问于 2016-07-19 08:34:57
回答 1查看 54关注 0票数 0

好吧,我有个奇怪的问题。我有一个带有变量screenwidthscreenheight的screen类,以及一个长度为screen.screenwidth * screen.screenheightzbuffer。当我想把zbuffer传递给一个函数时,我会这样做,

代码语言:javascript
复制
void func(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]);

而且它是有效的。但是,在.h文件的player类中,我定义了如下函数

代码语言:javascript
复制
void rendervisiblehunks(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]);

没问题。然后,在.cpp文件中,我有以下内容

代码语言:javascript
复制
void Player:: rendervisiblehunks(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]){
}

复制并粘贴了函数参数,但仍然显示它与.h文件中的任何函数声明都不匹配。我尝试在两个文件中将zbuffers长度更改为100,但它并不适用于原始的screen.screenwidth*screen.screenheight长度。为什么这个函数适用于其他函数,而不适用于这个函数。为什么它在.h文件中有效,而在.cpp文件中无效。使用函数参数作为另一个参数的数组大小的规则是什么?(顺便说一句,你不能这样做。)

我复制并粘贴了它工作的另一个函数。

代码语言:javascript
复制
void render(Triangle& triangle,Player& camera,Screen& screen,double     (&zbuffer)[screen.screenwidth*screen.screenheight]);

我不敢相信我之前没有想到这一点,但我会把zbuffer放到screen类中

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 09:05:23

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

代码语言:javascript
复制
class Screen
{
    //...
    int screenwidth;
    int screenheight;
    double *zbuffer;
    //...
};

代码语言:javascript
复制
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...
}

代码语言:javascript
复制
Screen screen;
Player p;
...
p.rendervisiblehunks(screen, screen.zbuffer, screen.screenwidth * screen.screenheight);

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

代码语言:javascript
复制
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...
}

代码语言:javascript
复制
Screen screen;
Player p;
...
p.rendervisiblehunks(screen);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38447877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档