好吧,我有个奇怪的问题。我有一个带有变量screenwidth和screenheight的screen类,以及一个长度为screen.screenwidth * screen.screenheight的zbuffer。当我想把zbuffer传递给一个函数时,我会这样做,
void func(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]);而且它是有效的。但是,在.h文件的player类中,我定义了如下函数
void rendervisiblehunks(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]);没问题。然后,在.cpp文件中,我有以下内容
void Player:: rendervisiblehunks(Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]){
}复制并粘贴了函数参数,但仍然显示它与.h文件中的任何函数声明都不匹配。我尝试在两个文件中将zbuffers长度更改为100,但它并不适用于原始的screen.screenwidth*screen.screenheight长度。为什么这个函数适用于其他函数,而不适用于这个函数。为什么它在.h文件中有效,而在.cpp文件中无效。使用函数参数作为另一个参数的数组大小的规则是什么?(顺便说一句,你不能这样做。)
我复制并粘贴了它工作的另一个函数。
void render(Triangle& triangle,Player& camera,Screen& screen,double (&zbuffer)[screen.screenwidth*screen.screenheight]);我不敢相信我之前没有想到这一点,但我会把zbuffer放到screen类中
发布于 2016-07-19 09:05:23
不能使用一个参数值来定义另一个参数值。您必须逐个传递这些值:
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);https://stackoverflow.com/questions/38447877
复制相似问题