#include<iostream> using namespace std; class girl { private: char name; int age; public: girl(char n, int d) //构造函数 { name= n; age=d; } void display(girl &x); //声明友元函数 }; void display() //类外定义 友元函数 { cout<<"Girl's name is :"<<x. name<<", age is :"<<x.age<<endl; //girl类的友元函数能访问girl类对象的私有成员 } int main( ) { girl e('z',18); display( e ); //调用友元函数 return 0; }
时间: 2024-03-18 10:40:38 浏览: 48
该程序有错误,编译时会提示错误信息。具体来说,在类外定义友元函数`display`时,应该传入`girl`类型的引用参数,而不是空参数列表。修改后的程序如下:
```
#include<iostream>
using namespace std;
class girl {
private:
char name;
int age;
public:
girl(char n, int d) { //构造函数
name = n;
age = d;
}
friend void display(girl &x); //声明友元函数
};
void display(girl &x) { //类外定义友元函数
cout<<"Girl's name is :"<<x.name<<", age is :"<<x.age<<endl;
//girl类的友元函数能访问girl类对象的私有成员
}
int main() {
girl e('z', 18);
display(e); //调用友元函数
return 0;
}
```
相关问题
#include <iostream> using namespace std; class AI_Student { public: AI_Student(); ~AI_Student(); private: static int count; }; class AI_Boy : private AI_Student { public: void showNum(); }; class AI_Girl : private AI_Student { public: void showNum(); }; AI_Student::AI_Student() { ++count; } AI_Student::~AI_Student() { --count; } void AI_Boy::showNum() { cout << "男生数量:" << count << endl; } void AI_Girl::showNum() { cout << "女生数量:" << count << endl; } int main() { AI_Boy b1, b2, b3; AI_Girl g1, g2; b1.showNum(); g1.showNum(); return 0; }这段代码为什么无法运行
这段代码无法运行是因为 AI_Student 类中的静态成员变量 count 没有被初始化。在类中声明静态成员变量后,需要在类外进行定义和初始化,例如:
```cpp
int AI_Student::count = 0;
```
在主函数中加入上述代码即可解决问题。
按照以下代码编写vs2010版本的所需要的头文件#include<opencv2/core.hpp> #include<opencv2/highgui.hpp> #include<opencv2/imgproc.hpp> #include<iostream> using namespace std; using namespace cv; //创建灰度图像的直方图 class Histogram1D { private: int histSize[1];//直方图中箱子的数量 float hranges[2];//值范围 const float* ranges[1];//值范围的指针 int channels[1];//要检查的通道数量 public: Histogram1D() { //准备一维直方图的默认参数 histSize[0] = 256;//256个箱子 hranges[0] = 0.0;//从0开始(含) hranges[1] = 256.0;//到256(不含) ranges[0] = hranges; channels[0] = 0;//先关注通道0 } cv::Mat getHistogram(const cv::Mat& image); }; //计算一维直方图 cv::Mat Histogram1D::getHistogram(const cv::Mat& image) { cv::Mat hist; //用calcHist函数计算一维直方图 cv::calcHist(&image, 1, //仅为一幅图像的直方图 channels, //使用的通道 cv::Mat(), //不使用掩码 hist, //作为结果的直方图 1, //这是一维的直方图 histSize, //箱子数量 ranges //像素值的范围 ); return hist; } int main() { //读取输入的图像 cv::Mat image = cv::imread("girl.jpg", 0);//以黑白方式打开 //直方图对象 Histogram1D h; //计算直方图 cv::Mat histo = h.getHistogram(image); //循环遍历每个箱子 for (int i = 0; i < 256; i++) cout << "Value" << i << "=" << histo.at<float>(i) << endl; }
以下是按照所给代码编写的vs2010版本所需要的头文件:
```c++
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
//创建灰度图像的直方图
class Histogram1D
{
private:
int histSize[1];//直方图中箱子的数量
float hranges[2];//值范围
const float* ranges[1];//值范围的指针
int channels[1];//要检查的通道数量
public:
Histogram1D()
{
//准备一维直方图的默认参数
histSize[0] = 256;//256个箱子
hranges[0] = 0.0;//从0开始(含)
hranges[1] = 256.0;//到256(不含)
ranges[0] = hranges;
channels[0] = 0;//先关注通道0
}
cv::Mat getHistogram(const cv::Mat& image);
};
//计算一维直方图
cv::Mat Histogram1D::getHistogram(const cv::Mat& image)
{
cv::Mat hist;
//用calcHist函数计算一维直方图
cv::calcHist(&image, 1, //仅为一幅图像的直方图
channels, //使用的通道
cv::Mat(), //不使用掩码
hist, //作为结果的直方图
1, //这是一维的直方图
histSize, //箱子数量
ranges //像素值的范围
);
return hist;
}
int main()
{
//读取输入的图像
cv::Mat image = cv::imread("girl.jpg", 0);//以黑白方式打开
//直方图对象
Histogram1D h;
//计算直方图
cv::Mat histo = h.getHistogram(image);
//循环遍历每个箱子
for (int i = 0; i < 256; i++)
cout << "Value" << i << "="
<< histo.at<float>(i) << endl;
return 0;
}
```
需要注意的是,以上代码中的图片文件girl.jpg需要放置在与源代码文件相同的目录下,否则需要指定正确的图片路径。
阅读全文