2015-09-27 17 views
-1

所以我正在運行一些C++練習,由Bruce Eckel提供,這裏的想法是我試圖創建一個頭文件文件,然後將該頭文件包含到源文件中,在該文件中爲這些函數創建一些定義,最後創建包含頭文件的第二個源文件,並定義包含對所有先前函數調用main()的第二個源文件。創建幷包含一個帶有函數聲明的頭文件,然後是帶有定義的源文件,然後是調用函數的另一個源文件

函數本身是隻包含函數名稱的虛擬函數,所以我知道它們正在工作。

HEADER

#ifndef headerone 
#define headerone 

int add(int x, int y); 
void slap(); 
int sq(float z); 

#endif 

與功能的資源文件。定義

#include "headerone.h" 
#include <iostream> 
using namespace std; 

int add (int x, int y){ 
    cout << "add, int x, int y return int" << endl; 
} 
void slap() { 
    cout << "slap, no arguments, return void" << endl; 
} 

int sq(int z){ 
    cout << "sq, int z, return int" << endl; 
} 

的資源文件2函數調用

#include "headerone.h" 
#include <iostream> 

int main(){ 
    add(2,3); 
    sq(2); 
    slap(); 
} 

編輯:在下面的函數調用的註釋中列出失蹤的參數列表現在已經添加了,每個函數的新錯誤都是a長的行:未定義的引用'add(int,int)'與slap函數另外返回錯誤:ld返回1退出狀態。

+0

你忘了傳遞函數參數 –

+0

乾杯,現在它的破壞至少:)。 – user5261555

+0

'int main(){add(1,2);平方(4);拍擊();返回0; }' – Pixelchemist

回答

0

這些:

add; 
sq; 
slap; 

是不是函數調用。閱讀文檔,或C++的書有關語法:http://en.cppreference.com/w/cpp/language/operator_other#Built-in_function_call_operator

A function call expression, such as E(A1, A2, A3), consists of an expression that names the function, E, followed by a possibly empty list of expressions A1, A2, A3, ..., in parentheses.

重點煤礦。請注意代碼中缺少括號。由於您不調用這些函數,因此沒有輸出。

I would also appreciate general tips about what to do when my code compiles correctly yet does not output (or work) as intended.

在您的編譯器中啓用所有警告。即使您的程序看起來工作正常,您也應該這樣做。在這種情況下,例如,g ++會警告你沒有任何作用的語句。

有在你的代碼的幾個其他錯誤:

addsq返回非void,但你忘了返回任何東西。警告也會通知你。您沒有給出int sq(float z)的定義。您只定義它是超載int sq(int z)。所以,如果您確實撥打sq,那麼您的代碼將無法鏈接。

+0

謝謝,理解。 – user5261555

相關問題