标题:出了个问题不知道是怎么回事
只看楼主
江帆
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2014-7-21
结帖率:50%
已结贴  问题点数:5 回复次数:2 
出了个问题不知道是怎么回事
#include<iostream>
#include<string>
using namespace std;
//第一个类开始
class shen_stock{
    int general, ST, PT;
public:
    shen_stock(int general = 0, int ST=0, int PT = 0);
    friend void count( const shen_stock &a,  const shang_stock &b);
};
shen_stock::shen_stock(int g, int s, int p){
    general = g;
    ST = s;
    PT = p;
}

//第二个类开始
class shang_stock{
    int general, ST, PT;
public:
    shang_stock(int general = 0, int ST = 0, int PT = 0);
    friend void count( const shen_stock&a, const shang_stock&b);
};
shang_stock::shang_stock(int g, int s, int p){
    general = g;
    ST = s;
    PT = p;
}

//count函数的定义
void count(const shen_stock&a, const shang_stock&b){

    cout << a.general + b.general << endl;

}
int main(){
    return 0;
}
就是我把count函数都声明为两个类的友元,但是定义count时只能访问第二个类的私有数据,但是无法访问第一个类的私有数据,也就是最后  cout << a.general + b.general << endl;这条语句中a.general是错的,但是b.general却是对的
搜索更多相关主题的帖子: general include public friend count 
2014-07-24 12:35
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:3 
vs2010 下  你这个代码是无法编译的

程序代码:
>------ 已启动全部重新生成: 项目: w5, 配置: Release Win32 ------
1>Build started 2014-7-25 8:08:03.
1>_PrepareForClean:
1>  Deleting file "Release\w5.lastbuildstate".
1>InitializeBuildStatus:
1>  Creating "Release\w5.unsuccessfulbuild" because "AlwaysCreate" was specified.
1>ClCompile:
1>  stdafx.cpp
1>  w5.cpp
1>w5.cpp(11): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>w5.cpp(11): error C2143: 语法错误 : 缺少“,”(在“&”的前面)
1>w5.cpp(35): error C2248: “shen_stock::general”: 无法访问 private 成员(在“shen_stock”类中声明)
1>          w5.cpp(8) : 参见“shen_stock::general”的声明
1>          w5.cpp(7) : 参见“shen_stock”的声明
1>  正在生成代码...
1>
1>生成失败。
1>
1>Time Elapsed 00:00:03.31
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========


DO IT YOURSELF !
2014-07-25 08:08
业业大哥
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2014-3-20
得分:3 
#include<iostream>
#include<string>
using namespace std;
//第一个类开始
class shang_stock;//我是在vc6.0下,加上这句话就好了。
/*因为若是没有这句话,则下面蓝色字体的shang_stock类就相当于没提前定义(甚至申明)就“使用了”,这显然是不行的*/
class shen_stock{
    int general, ST, PT;
public:
    shen_stock(int general = 0, int ST=0, int PT = 0);
    friend void count( const shen_stock& a, const shang_stock& b);
};
shen_stock::shen_stock(int g, int s, int p){
    general = g;
    ST = s;
    PT = p;
}

//第二个类开始
class shang_stock{
    int general, ST, PT;
public:
    shang_stock(int general = 0, int ST = 0, int PT = 0);
    friend void count( const shen_stock&a, const shang_stock&b);
};
shang_stock::shang_stock(int g, int s, int p){
    general = g;
    ST = s;
    PT = p;
}

//count函数的定义
void count(const shen_stock&a, const shang_stock&b){

    cout << a.general + b.general<< endl;

}
int main(){
    return 0;
}
2014-07-25 20:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-434347-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.273587 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved