class C{ int x; void setx(int a) { /* … */} }; void f() { C c1; c1.setx(3); } 的错误
时间: 2024-03-27 11:42:04 浏览: 112
这段代码没有明显的错误,但是它有以下两个问题:
1. 缺少访问修饰符:在C++中,类的成员默认是私有的。因此,在定义类C时,应该使用public、protected或private关键字来明确指定成员的访问级别。
2. 没有main函数:这段代码只是一个类的定义和一个函数调用,缺少了main函数,无法直接运行。如果要将其作为完整的程序运行,需要添加包含头文件、main函数等必要的部分。
相关问题
class A { protected: void setx(int a) { x = a; } private: int x; }; int main() { A a1; a1.setx(10); return 0; }找出并解释下列代码的错误
这段代码的错误在于 `setx` 函数的访问权限设置为了 `protected`,无法从 `main` 函数中直接调用。因为 `protected` 成员只能被类的成员函数及其子类的成员函数访问,而 `main` 函数不属于类的成员函数,因此无法访问 `protected` 成员。
要修正这个错误,可以将 `setx` 函数的访问权限改为 `public`。这样,就可以直接从 `main` 函数中调用 `setx` 函数了。修改后的代码如下:
```c++
class A {
public:
void setx(int a) {
x = a;
}
private:
int x;
};
int main() {
A a1;
a1.setx(10);
return 0;
}
```
这样就可以在 `main` 函数中成功调用 `setx` 函数,并将 `x` 成员变量的值设置为 10。
#include<iostream> using namespace std; //创建一个点类 class point { public: void setx(int a) { x = a; }//设置x int getx() { return x; }//获取x void sety(int b) { y = b; }//设置y int gety() { return y; }//获取y private: int x; int y; }; class circle//创建一个圆类 { public: void setr(int r) { c_R = r; }//设置半径 int getr() { return c_R; }//获取半径 void setpoint(point q) { p = q; }//设置圆心 point getpoint() { return p; }//获取圆心 private: int c_R; point p; }; //判断点与圆的关系 void oncircle(circle& c, point &p) { //先算点到圆心的距离de平方 int distance = (p.getx() - c.getpoint().getx) * (p.getx() - c.getpoint().getx) + (p.gety() - c.getpoint().gety) * (p.gety() - c.getpoint().gety); } void main() { point a,o; o.setx(10); o.sety(20); a.setx(15); a.sety(18); circle C; C.setr(10); C.setpoint(o); system("pause"); }以上代码哪里错了
代码中有一个错误,即在 `oncircle()` 函数中获取圆心的 x 坐标时漏掉了括号,应该写成 `c.getpoint().getx()`。因此,正确的代码应该是:
```
#include<iostream>
using namespace std;
//创建一个点类
class point {
public:
void setx(int a)
{
x = a;
}//设置x
int getx()
{
return x;
}//获取x
void sety(int b)
{
y = b;
}//设置y
int gety()
{
return y;
}//获取y
private:
int x;
int y;
};
//创建一个圆类
class circle {
public:
void setr(int r)
{
c_R = r;
}//设置半径
int getr()
{
return c_R;
}//获取半径
void setpoint(point q)
{
p = q;
}//设置圆心
point getpoint()
{
return p;
}//获取圆心
private:
int c_R;
point p;
};
//判断点与圆的关系
void oncircle(circle& c, point &p) {
//先算点到圆心的距离de平方
int distance =
(p.getx() - c.getpoint().getx()) * (p.getx() - c.getpoint().getx())
+ (p.gety() - c.getpoint().gety()) * (p.gety() - c.getpoint().gety);
}
void main() {
point a,o;
o.setx(10);
o.sety(20);
a.setx(15);
a.sety(18);
circle C;
C.setr(10);
C.setpoint(o);
system("pause");
}
```
阅读全文