为什么以下程序会导致错误?#include <iostream> #include <string> using namespace std;class Box { int capacity; public: Box(int cap){ capacity = cap; } friend void show(); }; void Box::show() { Box b(10); cout<<"Value of capacity is: "<<b.capacity<<endl; } int main(){ show(); return 0; }
时间: 2024-01-17 10:05:35 浏览: 58
使用include <iostream>时一定要加using namespace std
这个程序会导致错误,因为在Box类中定义了一个名为show的友元函数,但是在Box::show函数的实现中,它又创建了一个名为b的Box对象来访问capacity成员。然而,在main函数中调用的是show函数而不是Box类的对象,因此无法访问Box类的capacity成员。
要解决这个问题,你可以将Box::show函数中创建的Box对象替换为函数参数,然后将Box类的对象传递给show函数。或者你可以将Box::show函数的实现移动到main函数中,并在Box类中删除它的声明。以下是第一种解决方案的示例代码:
```c++
#include <iostream>
#include <string>
using namespace std;
class Box {
int capacity;
public:
Box(int cap) {
capacity = cap;
}
friend void show(Box obj);
};
void show(Box obj) {
cout << "Value of capacity is: " << obj.capacity << endl;
}
int main() {
Box b(10);
show(b);
return 0;
}
```
现在,你可以通过将Box类的对象传递给show函数来访问Box类的capacity成员,并且程序不会再导致错误。
阅读全文