2013-04-22 102 views
1

我正在編寫一個代碼來處理C++中的向量。 我有3個文件:main.cpp,Vektor.cpp和Vektor.h 現在我想在main中調用一個靜態函數,它在Vektor.cpp中實現並在Vektor.h中聲明。 「test」和「test2」是Vektor類的兩個實例。 Eclipse會拋出一個錯誤,但我不知道爲什麼;它說,在這條線 在C++中調用靜態函數

多個標記 - 功能「addieren」不能 解決 - 「addieren」在這個 範圍 未聲明 - 「ENDL」 無效超載 - 行斷點:主.cpp [line: 28]

錯誤在哪裏?包含「Vektor.h」。這裏有必要扦插:

main.cpp中:

// ... 
cout << "Summe: " << addieren(test,test2) << endl; 

Vektor.cpp:

Vektor Vektor::addieren(Vektor vektor1, Vektor vektor2) 
{ 
Vektor vektorSumme; 
vektorSumme.set_x(vektor1.get_x() + vektor2.get_x()); 
vektorSumme.set_y(vektor1.get_y() + vektor2.get_y()); 
vektorSumme.set_z(vektor1.get_z() + vektor2.get_z()); 
return vektorSumme; 
} 

Vektor.h:

class Vektor 

{ 
//... 
public: 
    //... 
static Vektor addieren(Vektor vektor1, Vektor vektor2); 

感謝您的幫助!

+0

一個很好的例子,爲什麼你應該使所有源和評論英語的習慣;有一天不知道你的母語的人會看你的代碼,使雙方都感到尷尬。 - EinschönesBeispiel warum man sich zur Angewohnheit machen sollte,allen Code und Kommentare in Englisch zu halten; eines Tages WIRD jemand deinen Code lesenmüssen,deriner Mutterspra​​che nichtmächtigist,mit Problemenfürbeide Seiten。 – DevSolar 2013-04-22 15:51:09

回答

5

你需要調用它爲:

Vektor::addieren(test,test2); 

靜態成員函數可以使用類的完全限定名稱被調用。它們也可以在類實例上調用,但由於您沒有任何實例,因此它不適用於此。

+1

它也可以在實例上調用,雖然在這種情況下這樣做沒有意義。 – derpface 2013-04-22 15:54:37

+0

準確,所以答案的第二部分是無效的 – 4pie0 2013-04-22 16:05:53

1

調用靜態函數的語法是:Vektor::addieren(...)

1

你應該把它

Vektor::addieren(test, test2) 

但是我建議你,爲提高addieren功能通過引用或指針傳遞兩個向量。

addieren(Vektor & vektor1, Vektor & vektor2)

addieren(Vektor * vektor1, Vektor * vektor2)

但你必須用

Vektor::addierent(&test, &test2) 
+2

他應該只通過指針傳遞它,如果他打算他們是可選的。此外,他應該使用const引用,因爲他似乎只是讀取向量中的值。 – Dennis 2013-04-22 15:48:33

+0

是的,但是如果他初學者很早,那麼現在就沒有必要爲了const而去解決,爲什麼它很有用。隨着指針傳遞,你是對的。 – 2013-04-22 15:56:54

1

您需要用類的完全合格的名字來稱呼這一點,因爲叫它:

Vektor v_res=Vektor::addieren(test, test2); 

或對象(類的實例)上:

Vektor v; 
Vektor v_res=v.addieren(test, test2);