台灣最大程式設計社群網站
線上人數
2059
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> C/C++ >> 從類別調用資料
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
從類別調用資料
價值 : 50 QP  點閱數:640 回應數:4
樓主

jismay
門外漢
0 1
26 2
發送站內信



好像很簡單但是一直都搞不懂的問題
請問要怎麼從某個CPP藉由INCLUDE .H標頭檔,把另一CPP的類別中定義好的變數拿過來用呢?
-----------------------------------------------
#include <string>
#include <stdio.h>
#include "character.h"

void remu()
{
character remu;
remu.number=0;
remu.name=" 中文 ";
remu.skill="不受中文影響的能力";
remu.skillexplanation="我是中文解說。";
remu.call=false;
remu.speed=5;
remu.movelevel=1;

}
---------------------------------------------------.CPP

-------------------------------------------------
#include <string>
#include <stdio.h>

using namespace std;

class character
{
public:
int number;
string name;
string skill;
string skillexplanation ;
bool call;
int speed;
int movelevel;
};
----------------------------------------------------.H
將CPP的參數拿去給另外一個CPP當作資料
還是說我應該使用文件讀取來完成資料的儲存比較恰當?未來上面.CPP將會變的龐大
謝謝回答的人


搜尋相關Tags的文章: [ 類別 ] , [ 變數 ] , [ 資料引用 ] ,
本篇文章發表於2016-09-14 21:26
1樓
回應

Raymond
檢舉此回應
看不懂你的問題. 請重新詳細敘述你的問題, 並用例子來顯示你想達到的效果. 注意: 「定義好的變數」, 「參數」, 「資料」是不同的東西, 不同的東西有不同的作法.
本篇文章回覆於2016-09-16 00:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

jismay
檢舉此回應
>>Raymond 謝謝你的回應
我是新手,目前找不到刪除留言的方法,還請您告訴我該怎麼做

至於我提問的問題,我已經找到解決方法了
我的目的是希望有個地方可以讓我設定資料,並且在需要的時候可以呼叫函數幫我送過來
一開始以為從其他地方調用資料一定要用.H,後來發現原來CPP也可以被INCLUDE
所以我就直接在另外的CPP設定了含有類別的函數,並且用RETURN請函數幫我回傳訊息

雖然感覺不聰明,但以新手管理程序跟記憶體的程度來說,我覺得已經堪用

上面是簡化的程序A顯示
確實能傳回程序B的值,本來用.H調用的一個頭兩個大
新手教程裡都不會說到關於INCLUDE可調用的對象,所以弄得很頭大


本篇文章回覆於2016-09-16 12:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

Raymond
檢舉此回應
雖然 #include 可以引入任何文字檔, 但你做的方法是錯誤的. 如果你的專案包括 a.cpp 及 b.cpp, 那在編譯時, b.cpp 的內容會被編譯兩次, 一個在 a.obj, 一個在 b.obj. 編譯不會有問題, 但在 link 時就會有錯誤.

所以, 一般正常的專案是不會用 #include 來引入 .cpp 或 .c 檔的.

如果你的目的只是要在 a.cpp 裡呼叫 b.cpp 的函式, 並獲得函式的回傳值, 這是很簡單的, 也有最標準的作法:
1. 把 class 的定義放在一個頭檔 (.h) 裡, 一般頭檔的名字會直接用 class 的名字. 頭檔要用 header guard 來包, 這是避免直接或間接的多次引用:

[character.h]

上面的 『#if !defined(XXX)/#define XXX/#endif』 就是所謂的 header guard. 這是最傳統的做法, 可以用在所有的編譯器. 有些編譯器會支援 #pragma once, 可以用來簡化 header guard 的寫法.


2. 如果 b.cpp 裡的函式需要在其它地方被呼叫, 那你需要一個 b.h 頭檔, 裡面放需要被呼叫的函式的宣告:
[b.h]


[b.cpp]


3. a.cpp 的內容:

如果 a.cpp 的函式需要在其它的地方被呼叫, 你也許要一個 a.h, 用來存放被呼叫的函式的宣告.

你的專案就包括了 character.h, a.h, a.cpp, b.h, b.cpp. 在建專案時, IDE 會自動的編譯所有的 .cpp 檔.

最後建議你養成這個習慣: 在使用 C++ 標準函式庫時, 不要用 using namespace std, 儘量習慣用 std:: 來前綴標準函式庫裡的名字.

本篇文章回覆於2016-09-16 22:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

jismay
檢舉此回應
謝謝你Raymond
我正在思考該如何把
10 switch(ask)
11 {
12 case 1:
13 return remu.number;
14 break;
15 }
做成類別方法,讓B.CPP可以調用
int remu(int ask)中的數值

如果思考不出來,我會在另外用討論版提出問題
本篇文章回覆於2016-09-18 17:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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