0

したがって、これは Vector クラスの public 継承でのメソッドの宣言です。

Vector Addition(Vector a, Vector b);

そして、クラス外の実装は次のとおりです。

Vector Vector::Addition(Vector a, Vector b)
{
    Vector temp = *this;
    temp.x=a.x+b.x;
    temp.y=a.y+b.y;
    return temp;
}

そして、メイン関数でこれを行うと:

Vector c(0,0),a(0,0),b(0,0);
c=Addition(a,b);

エラーが表示されます: 識別子 "追加" は未定義です。助けてください!

4

3 に答える 3

4
c=Addition(a,b);

関数の独立した関数を呼び出すようにコンパイラに指示します。独立した関数ではないメンバー関数を提供したため、コンパイラは何も見つけることができず、文句を言います。

独立した機能を提供する必要があります。

于 2013-03-17T15:28:27.813 に答える
3

Addition関数は のメンバーであるため、次のVectorように呼び出す必要があります。

c = Vector::Addition(a, b);

また

c = a.Addition(b);

Addition最初のものは関数がstaticである必要があることに注意してください。つまり、具体的なインスタンス (this関数本体内) で動作しないことを意味します。

static Vector Addition(Vector a, Vector b);

ただし、ポインターにアクセスできないthisため、コピーを取得する代わりにデフォルト構築する必要がtempあります(ちなみに、上書きxしてから使用されていませyん)。

2 つ目は、左側のオペランドをthis実装内のポインタとして使用します (aシグネチャにはありません)。

Vector Addition(Vector b)
{
    Vector temp = *this;
    temp.x += b.x;
    temp.y += b.y;
    return temp;
}

C++でも演算子をオーバーロードできることに注意してください。このために、2 番目のインスタンスを取る非静的メンバー関数を定義しoperator+ます (最初のインスタンスはthis関数内のポインターで、左側のオペランドになります)。

Vector operator+(const Vector &other) const;

実装 (1 つの可能性):

Vector Vector::operator+(const Vector &other)
{
    Vector temp = *this;
    temp.x += other.x;
    temp.y += other.y;
    return temp;
}
于 2013-03-17T15:29:49.850 に答える
1

Addition内部で宣言しVectorました。正しい方法は...

(1) グローバル関数として足し算を持つ。これには、Vector クラスから Addition の定義を取り出す必要があります。したがって、次のようになります

Vector Addition(/*parameters*/) { /* implementation */ }

(2) Addition をstaticキーワードで static にし、 code で呼び出すc = Vector::Addition(a, b)

コードは次のようになります

 class Vector{
 static Vector Addition(/* arguments */);
}

Vector Vector::Addition(/*arguments*/) {/*implementation*/}
于 2013-03-17T15:29:53.583 に答える