我正在完成一项家庭作业,其中包括编写程序以使用ASCII字符绘制形状并在屏幕上移动它们。在这个例子中,我试图编写一个方法来移动已经绘制的圆。我知道我的drawCircle
方法有效,但是当我尝试在drawCircle
方法中调用moveCircle
方法时,它不会打印任何内容。
void CircleType::drawCircle() const{
for (int i = 0; i < NUMBER_OF_ROWS; i++) {
for(int j = 0; j < NUMBER_OF_COLUMNS; j++) {
int p = abs (x - j);
int q = abs (y - i);
int distance = pow(p, 2) + pow(q, 2);
int realDistance = pow(radius, 2);
if (abs(realDistance - distance) <= 3){ // I tested out several values here, but 3 was the integer value that consistently produced a good looking circle
drawSpace[i][j] = symbol;
}
}
}
displayShape();
return;
}
bool CircleType::moveCircle(int p, int q){
if (p - radius < 0 || p + radius > NUMBER_OF_COLUMNS){
cout << "That will move the circle off the screen"<< endl;
return false;
}
else if (q - radius < 0 || q + radius > NUMBER_OF_ROWS){
cout << "That will move the circle off the screen"<< endl;
return false;
}
else{
x = p;
y = q;
for (int m = 0; m < NUMBER_OF_ROWS; m++){
for(int n = 0; n < NUMBER_OF_COLUMNS; n++){
if (drawSpace[m][n] == symbol)
drawSpace[m][n] = ' ';
}
}
void drawCircle();
return true;
}
}
drawSpace
是一个2D字符数组,用于保存形状的ASCII字符,displayShape
是打印出该2D数组的函数。如上所述,drawCircle
函数有效,但moveCircle
方法不起作用。当我尝试在drawCircle
中使用moveCircle
方法时,我是否将{{1}}方法调用错误。
答案 0 :(得分:6)
void drawCircle();
这不是函数调用;它是一个函数原型声明。要调用该函数,只需使用
drawCircle();
函数原型只是告诉编译器存在具有特定签名的函数。这允许你做这样的事情(尽管这样做并不常见)。
int main() {
void Foo();
Foo();
}
void Foo { /* whatever */ }
如果省略原型,编译器会抛出错误,因为Foo
在使用之前未声明。在一个类似的(也是更常见的)静脉中你也可以这样做(称为前向声明)。
void Foo();
int main() {
Foo();
}
void Foo { /* whatever */ }
或者只是先声明它,但在main
之前通常不需要大量的功能。
void Foo { /* whatever */ }
int main() {
Foo();
}