2013-04-22 100 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);