第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

c++入門問題

c++入門問題

C++
慕粉18341035298 2016-12-24 07:51:42
#include<iostream>#include<algorithm>#include<iomanip>#include<cmath>#include<string.h>#include<stdlib.h>#include<sstream>using namespace std;class two;class one{private :?string name;public :?void show(two &);?void setOne(){??string? s;??name = s;?}};class two{private :?string name;public :?friend void one::show(two &);?void setTwo(){??string? s;??name = s;?}};void one :: show(two &s){?cout << s.name << endl;?? //編譯器報錯,無法訪問name,這是為什么?}int main(){?one a;?two b;?a.setOne();?a.show(b);?b.setTwo();?return 0;}
查看完整描述

2 回答

?
onemoo

TA貢獻883條經驗 獲得超454個贊

所以我覺得很奇怪,你這個代碼似乎沒有錯。

你看,咱們來梳理下整個結構,確保我沒有看錯:

  • 你先前置聲明了 class two,這是為了讓后面 class one 的 show 函數能用two引用作參數

  • 后面是 class one 的類定義,但還不能在這里實現 show 函數(因為還沒有 class two 的定義)

  • 隨后是 class two 的類定義,在其中給 void one::show(two&) 以 friend 權限

  • 最后是 one::show 的實現,其中直接使用 two 的 private 成員 name 是沒有問題的?。?/p>

我沒看錯吧? ?你的代碼是這樣的沒錯吧?

你確定是正確進行編譯了嗎?

查看完整回答
反對 回復 2016-12-24
  • 慕粉18341035298
    慕粉18341035298
    在你的編譯器上可以通過嗎
  • onemoo
    onemoo
    可以,我把你的代碼拷過來(除了開頭沒用的include外),在我這里gcc 6.2可以編譯通過。 按照我寫的這個結構組織代碼,就可以正確地將成員函數聲明為friend,沒有問題的! 你的編譯器或IDE是什么?哪個版本?
  • onemoo
    onemoo
    這個問題解決了嗎?
點擊展開后面1
?
onemoo

TA貢獻883條經驗 獲得超454個贊

奇怪,乍看沒什么問題啊...

class two 中將 one::show(two&) 聲明為 friend 了,那么 one::show 應該可以訪問 class two 中的 name。

而且 class one 的類定義在 class two 之前,class one 之前也有 class two 的前置聲明了,編譯應該可以通過的呀???...

查看完整回答
反對 回復 2016-12-24
  • 2 回答
  • 0 關注
  • 1547 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號