台灣最大程式設計社群網站
線上人數
2251
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> C/C++ >> 如何在結構struct 裡面宣告方法?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
如何在結構struct 裡面宣告方法?
價值 : 10 QP  點閱數:879 回應數:2
樓主

shang
門外漢
0 7
52 0
發送站內信


#include <stdio.h>
#include <stdlib.h>
#define N 10

struct SpiralMaxtrix{
int n;
int maxtrix[N][N];
void ShowMatrix(SpiralMaxtrix A);
void ShowMatrixR(SpiralMaxtrix A);
}A;


int main(int argc, char *argv[]) {
printf("請輸入n:\n");
scanf("%d",&A.n);
printf("順時針印出:\n");
A.ShowMatrix(A);
printf("逆時針印出:\n");
A.ShowMatrixR(A);
return 0;
}

程式大概是這樣
可是我在struct裡宣告方法都編譯不過
所以來發文請問
還有我的函數方法實作應該要在struct和main的中間
還是因該寫在main的下面?
謝謝各位

搜尋相關Tags的文章: [ struct ] , [ 方法 ] ,
本篇文章發表於2016-10-06 21:51
1樓
回應

Raymond
檢舉此回應
如果是簡單的程式, 成員函式可以在架構或 class 內定義, 像這樣:

這只適合用在超簡單的程式碼裡. 比較好的做法是分成幾個檔案存放.
1. 把架構或 class 的定義, 放在自己的 .h 檔裡:

[SpirialMatrix.h]

上面的 #if/#define/#endif 叫 header guard. 如果你的編譯器有支援 #pragma once 的話, 可以用 #pragma once 取代:
[SpirialMatrix.h]


2. 把架構或 class 的成員函式放在 .cpp 檔裡:
[SpirialMatrix.cpp]


至於 main() 就改成:



如果 ShowMatrix[R]() 成員的目的只是打印 A 物件的內容, 那你不需要參數. 同時如果這兩個函式不會更改其它資料成員, 那它們應該是宣告為 const:


如果要打印的是參數的內容, 跟物件自己的內容無關, 那函式應該是個 static 函式, 並且參數應該寫成 const & 類型.


本篇文章回覆於2016-10-07 02:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

淺水員
檢舉此回應
C語言跟C++不一樣。
(樓主的寫法像是C語言)

一、C語言沒辦法在struct中直接宣告函式,取而代之的方法是用「函式指標」

二、函式的位置
其實寫在main之前跟寫在main之後兩種都可以,只是如果想寫在main之後,那在main之前要先告知瀏覽器函式的原型
(參考:C 語言快速導覽 - 函數原型的宣告)
例如上述程式碼就會變成

三、其他建議
ShowMatrix跟ShowMatrixR都是傳入struct,會把整個struct複製過去。
比較常用的方法是傳指標過去,這樣可以增加程式的效率。
不過這個部分您可以把原本的程式先寫出來再去更改。
本篇文章回覆於2016-10-07 10:24
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.