C標頭檔案及函式呼叫的問題,如何在C 標頭檔案中定義函式,然後在原始檔中使用

2022-02-20 17:06:29 字數 5791 閱讀 9754

1樓:手機使用者

c++的標頭檔案一般為變數宣告和函式宣告,巨集定義,以及include之類的東西。

這些東西在matlab裡通通的不需要,變數可以直接拿來用。matlab的庫函式不用宣告也不用include都可以直接用。matlab裡自己定義的子函式只要將函式原始檔和主程式放在同一個工作目錄裡,就可以直接呼叫,不用宣告。

補充回答:

對於你說的有些函式要統一起來用,我理解是不是說比如你有f,g兩個函式,然後計算f的時候要呼叫g,而主函式裡要呼叫f,而g不在主函式裡出現,只在f定義裡出現?

如果使這種情況的話,你可以把f和g定義在同一個函式檔案裡。

比如function y=f(x)

f=g(x);

function y=g(x)

y=x^2;

這樣你可以把上面的兩個函式定義放在同一個m檔案裡,然後以f.m命名這個檔案。這樣就可以在主函式裡呼叫f了。而g只在f函式檔案內部出現,不再以單獨的檔案出現

2樓:修武左曲靜

比如說你的標頭檔案叫"abc.h"

你在需要用到這個標頭檔案的最開始

#include

"abc.h"

然後就可以用裡面的函式了,當然"abc.cpp",即標頭檔案裡函式的實現檔案也要和標頭檔案和你自己的原始檔放在一個目錄下

3樓:大腦克

如果這些函式需要被頻繁呼叫,可以把他們的宣告放在一個.h標頭檔案中,再把這個標頭檔案incude某個需要的原始檔中。這樣應該比較好。

4樓:匿名使用者

如果是類的方法只用引用標頭檔案,如果你說的是一個類的方法在呼叫之前,就必須宣告。

5樓:nic_謝霆鋒

對,這樣的習慣是好的。

每個類獨立寫在一個.h和.cpp中,也是一種好習慣。

6樓:匿名使用者

是的,你的理解是正確的

如何在c++標頭檔案中定義函式,然後在原始檔中使用

7樓:大野瘦子

/*在text。h標頭檔案中進行宣告*/

#include

using namespace std;

void display(int,int);/*使用該函式來實現輸出*/

/*在texxt。cpp中進行定義,注意第一行,很重要因為不是c++標準庫中的標頭檔案,所以不能用<>,而要用""括起標頭檔案*/

#include "text.h"

void display(int x,int y)/*在主函式中進行呼叫函式*/

#include "text.h"

int main()

8樓:匿名使用者

一般為了安全性,只在標頭檔案中進行宣告,而不定義,在其它檔案中進行定義。給你個例子。因為我學了才一年,所以沒法給你說過多的理論,給你兩個例子你好好體會把。

簡單例子實現輸出兩個資料。

/*在text。h標頭檔案中進行宣告*/

#include

using namespace std;

void display(int,int);/*使用該函式來實現輸出*/

/*在texxt。cpp中進行定義,注意第一行,很重要因為不是c++標準庫中的標頭檔案,所以不能用<>,而要用""括起標頭檔案*/

#include "text.h"

void display(int x,int y)

下面這個例子實現類的標頭檔案中宣告,實現2*3矩陣的加法運算,並進行過載輸入輸出流。

在/*matrix。h中宣告*/

#include

class matrix

;/*在matrix。cpp中進行定義*/

#include "matrix.h"

return x;

}istream& operator>>(istream& w,matrix& y)

return w;

}ostream& operator <<(ostream & x,matrix& z)

9樓:匿名使用者

可以在原始檔中新增另一個原始檔嗎?好像只能新增標頭檔案哦,在c++中。你要程式執行正確,就要建一個標頭檔案,然後在標頭檔案中宣告函式,當然函式體的定義一般建義是在另一個原始檔中定義,在另一個原始檔中定義標頭檔案中宣告的函式時應使用#include語句把標頭檔案包含進來才行。

然後你在在主程式中的原始檔中使用#include把標頭檔案包含進來就沒錯了,下面舉個例子給你看下。

//標頭檔案hyong.h的內容如下

#ifndef hy //一般在標頭檔案都都使用這種格式以防止標頭檔案在同一檔案中被包含兩次。語名#ifndef hyong…..#endi表示僅當以前沒有使用前處理器編譯指令#define定義的名稱hyong時才處理#ifndef….

#endif之間的語句。

#define hy //在這裡用define定義一個名字hy,以便在下次訪問到該標頭檔案時,使該名字已經被定義,從而讓程式跳過#ifndef….#endif間的語句。

void g(); //在標頭檔案中宣告一個函式g();

#endif

//定義標頭檔案中宣告的函式的原始檔hyong.cpp的內容如下

#include "stdafx.h" //注意:在vc++中所有的原始檔中都要包含這條語句。

#include "hyong.h" //將標頭檔案hyong.h包含進來,這裡使用雙引號,而不是引號,以便能更快地檢查到該標頭檔案中定義的名字

#include

using namespace std;

void g() //定義標頭檔案hyong.h中宣告的函式g()

//主程式原始檔ff.cpp的內容如下

#include "stdafx.h"

#include

#include "hyong.h" //注意,主程式和hyong.cpp的檔案中都包含了這個標頭檔案。

using namespace std;

int main()

10樓:

在標頭檔案(如test.h)中定義函式,在同名原始檔(如test.cpp)中寫函式的實現,再寫增加一個主函式原始檔main.

cpp,同名原始檔與主函式原始檔中包含標頭檔案,標頭檔案中加入巨集定義:

#ifndef test_h__

#define test_h__

#endif //test_h__

c++呼叫平方根函式問題

11樓:匿名使用者

用迭代法求某數a的平方根。

已知求平方根的迭代公式為:x n+1 = (xn + a / xn) / 2

要求前後兩次求出的差的絕對值小於10-5。

演算法如下:

① 設定一個x的初值x0 ; (在如下程式中取x0=a/2, 通過迭代公式求出x1,可以肯定與真正的平方根相比,誤差很大。)

② 用上述公式求出x的下一個值 x1 ;

③ 如此繼續下去,直到前後兩次求出的x值(x n+1和xn)滿足以下關係:|x n+1-xn|<10-5 .

12樓:匿名使用者

c++中cmath標頭檔案中的sqrt函式能計算一個數的平方根。其原型在c++ 11中有四個:

double sqrt (double x);

float sqrt (float x);

long double sqrt (long double x);

double sqrt (t x);           // additional overloads for integral types

其中最後一個是為整型型別提供的過載版本,其會先將x轉換為double型別再進行計算。這是c++ 11提供的新功能。因此在c++ 11以前像sqrt(1)這類的語句是非法的,因為編譯器不知道匹配哪個函式(只有前三個版本),在c++ 11之後這樣的語句就合法了,編譯器會匹配最後一個版本。

樣例:(摘自cplusplus.com)

/* sqrt example */

#include /* printf */#include /* sqrt */

int main ()

13樓:匿名使用者

sqrt()的引數須為浮點,不可為整數,轉換 一下就可以了: sqrt((double)m)

14樓:匿名使用者

你前面定義了一個 整形的變數m, 後面有定義double型的 型別不匹配啊

15樓:匿名使用者

汗,c語言中,由於沒有過載,你直接sqrt(m)它會把m轉成浮點型.

但是c++中,型別不匹配時,它首先看的是有沒有過載函式.

而不巧,sqrt函式就有很多個第一個引數是int的多引數過載函式(這點是從報錯資訊上看出來的.)

m*1.0的結果是一個浮點數,有和它匹配的函式,所以正常執行.

解決方案就是"兔子和小強"寫的,他寫的那三種都行.

比如 sqrt( (double)m );

lz的c++基本功不夠啊=,=

16樓:兔子和小強

(double)m

m + 0.0

m * 1.0

c++函式宣告在標頭檔案,函式的描述在一個cpp,如何在另一個cpp呼叫這個函式 10

17樓:幻夢·人生

如果是普通的函式,可以在a檔案中進行宣告,b檔案中進行定義,c檔案中使用。

但是如果該函式是類的成員函式,那麼使用該函式需要使用物件進行呼叫,不能直接進行呼叫。

18樓:匿名使用者

在cpp前面包含此函式宣告的標頭檔案,即可呼叫

c++ vs 函式呼叫問題

19樓:

標準的做法是:把所有函式宣告放到最前面,全部宣告完畢之後才是函式的具體實現。

舉例如下:

#include

// 這裡把所有自定義函式的宣告提到最前面,

// 解決由於函式實現順序導致的呼叫未定義函式的問題

int fun1(int x, int y);

int fun2(int x);

void fun3(void);

.............

// 結束宣告

void main(void)

int fun2(int x)

int fun1(int x, int y)

void fun3(void)

注意上面fun2實現裡面呼叫了fun1, 而fun2實現卻在fun1之前,

由於在最前面已經宣告瞭fun1, 所以fun2這樣呼叫fun1不會有問題。

把自定義函式的宣告放到最前面的好處是,你完全不用考慮函式之間相互呼叫導致的函式實現順序問題,因為全部都在前面宣告瞭。

20樓:

自定義函式多了,解決辦法就是把函式單獨寫在一個標頭檔案裡,在主函式前包含這個標頭檔案就行了;在自定義函式中呼叫另一個自定義函式,要保證被呼叫的自定義函式在主調函式前定義,否則就要在主調函式中宣告。不然就存在你說的問題。

21樓:草叢裡的落葉

當你新增函式時,把你要函式呼叫的函式定義在該函式之前。

22樓:匿名使用者

你建的什麼工程啊,這麼牛叉。

你的新增分組2所在的那個函式怎麼跟上一個函式的}放在一行上了。

c語言呼叫exe檔案的問題,c語言問題,呼叫exe檔案

有個api函式可以直接呼叫 shellexecute null,null,d test.ext null,null,null 其中第3個引數就是 exe程式的絕對路徑.yourexe.exe d 假設你命令列接受這樣的選項比如 d system yourexe.exe d 被呼叫的程式如果需要有輸入...

c可以直接在標頭檔案中,寫函式的定義

可以啊,實現寫在h檔案的類裡的話就是預設內聯的 是什麼錯誤呢?如何在c 標頭檔案中定義函式,然後在原始檔中使用 在text。h標頭檔案中進行宣告 include using namespace std void display int,int 使用該函式來實現輸出 在texxt。cpp中進行定義,注...

python如何在檔案中呼叫另檔案的類

如果是抄在同一個 module中 也就是同一個py 檔案裡 直接用就可以 如果在不同的module裡,例如 a.py裡有 class a b.py 裡有 class b 如果你要在class b裡用class a 需要在 b.py的開頭寫上 from a import a function.py d...