1樓:南浦無雲送滄波
疑問有點多,大家一起共勉學習
按程式的上下順序來看:
疑問一: friend void y::y(x &x1);此句更改為friend class y;將作用域符及其後面的函式名刪掉,即可通過編譯,但是編譯結果什麼也沒有做。
疑問二:friend class y位置不對,應該放在public 的宣告裡面,否則就無法訪問了
疑問三:void main()主函式內的,各個宣告語句,似乎都沒有貢獻啊,完全沒有傳遞資料,是否為資料傳遞不當所致?
很抱歉……才疏學淺……你可以到csdn上去問一問……抱歉打擾你今天才看見訊息,新年快樂
2樓:匿名使用者
friend void y::y(x &x1);
直接寫成 friend class y;
3樓:匿名使用者
樓上的說得不錯,直接用friend class y就行。如果你真的只想設定y::y為友元,要這樣寫:
class x;
class y
;class x
private:
int a,b;
};void y::y(x &x1)
4樓:匿名使用者
#include
using namespace std;
class x;
class y
;class x
private:
int a,b;
};void y::y(x&x1)
void main()
只要將 y提到x的前面,然後將x 作一個宣告,然後將x內的友員函式提到類外(而且還要在類x的定義之後)定義就沒錯誤了
如果在x內就定義了友員函式的話 還會產生use of undefined type 'x'的錯誤,這是因為在類內宣告,y函式的形參只是一個用於驗證實參型別正確性的,而如果在類內用到了"x.a",這時候x類還沒有被定義,這就產生了上面的錯誤了。
而類外的定義 放在x 後面,編譯函式的時候,x已經定義了 就沒錯了。。。
本人這樣分析,有誤的話,請高手指教。。。
friend 可以放在類裡的任意位置的意思是 友員函式的不受類的訪問許可權(public,private)的影響。。
5樓:
如果要賦值的話用strcpy
你這樣的話等於是把字串指標a重新指向了一個分配於棧上的字串「abcd6」。
相當於這樣:
char* a = new char[4];
char* p = "abcd6";
a = p;
第一句話是在堆上分配4個char的連續空間,第二句是定義一個臨時變數"abcd6",它是分配於棧上的。第三句是讓char* a重新指向棧上的這個指標,那麼堆上分配的記憶體就沒有指標指向了。
按照你的原意,你應該這樣寫
char* a = new char[4];
strcpy(a, "abcd6");
cout<
這樣試試看。 另外,樓上這幾個能不能不要誤導人家。。。lz你可以去參考《高質量c++程式設計》關於字串和記憶體的部分,說的很清楚。 這種提示是連線錯誤 linker error 一般可執行程式的過程是 源 目標 經過編譯 可執行程式 經過連線 你的問題就出在最後一步。那麼為何出現這樣的問題呢?既然編譯通過,說明你的源程式沒問題。那麼連線出錯由什麼原因引起的呢?一般我們寫程式不可能每個功能自己寫,一些共用的功能 函式 被封裝在庫中... i 與 i 的區別 1.i是先把 i 的自身值加1,再取i值參與運算。2.i 是先取 i 當前的值參與運算,等到該語句結束 遇到分號 後才加1 特別注意。如題 int i,j i 10 i i i 先取i當前值進行賦值運算,即i 10 10 20,等語句結束後i再自增兩次,即i為22 cout i ... include void swap int p1,int p2 void main 這裡用引用,p1和p2既是入參又是出參void swap int p1,int p2 執行結果如下 從錯誤提示來看,是型別不相容。這個在c裡面是合法的,算warning,但在c 中是錯誤。用gcc可以編譯過去 roo...簡單c語言問題 linker ,簡單C語言問題 linker error
c 的簡單問題,一個c 的簡單問題
簡單的C語言問題,C語言程式設計問題