VS2017上C++友元成员函数问题

发布于 2022-09-06 12:39:55 字数 552 浏览 7 评论 0


class Time
{
public:
    Time(int, int, int);
    ~Time();
    void displayTime(Date&);  // 错误C2061
private:
    int hour;
    int minute;
    int second;
};

class Date
{
public:
    Date(int, int, int);
    ~Date();
    friend void Time::displayTime(Date &); //错误C2245
private:
    int year;
    int month;
    int day;
};

错误信息:

错误 C2061 语法错误 : 标识符“Date”
错误 C2245 将不存在的成员函数“Time::displayTime”指定为友元(成员函数签名与所有重载都不匹配)

请告诉这个类友元成员函数哪里出问题了?源代码出自谭浩强的《C++程序设计》。谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

很糊涂小朋友 2022-09-13 12:39:55
class Date;

第一行缺少Date类声明。

墨离汐 2022-09-13 12:39:55

我将源代码进行了修改的 ,可以参考如下代码 :

#include <iostream>
#include <cstdlib>

//前置声明只能充当的作用 : 
//1.定义一个指向该类型的指针和引用
//2.在不完全类型期间只能充当函数声明的的参数类型
class Date;   

class Time   
{
public:
    Time(int h, int m, int s): hour(h) , minute(m) , second(s){}; 
    ~Time(){};
    void displayTime(Date&);  // 错误C2061    
private:
    int hour;
    int minute;
    int second;
   
};

class Date    
{
public:
    Date(int y, int m, int d): year(y) , month(m) , day(d){};
    ~Date(){}
    friend void Time::displayTime(Date &); //错误C2245
private:
    int year;
    int month;
    int day;
};


//最后定义clear函数
void Time::displayTime(Date& date){
    std::cout <<date.year<<std::endl;
}
 
int main(){
    Date date(1,2,3);
    Time time(4,5,6);
    time.displayTime(date);
    return EXIT_SUCCESS;
}

下图是成员函数充当友元函数的操作顺序 , 参考《C++ primer 第五版》 总结出的图 :
注意 : 其中的 Window_mgr 等价 Time 类 , Screen类等价Date类
图片描述

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文