0

そこで、単純なジオメトリ プログラムを作成し、テスト コンパイルを行います。

何らかの理由で、このコードをコンパイルすると、次のエラーが発生します。

base.cc: In member function ‘void seg::init_seg(p, p)’:
base.cc:20:3: error: ‘mid’ was not declared in this scope
base.cc:22:3: error: ‘b’ was not declared in this scope

しかし興味深いことに、ポイント 1 と 2 ではエラーが表示されず、mid と b のみが表示されます。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

struct p{
    float x=0.0f,y=0.0f;
    void init_p(float sx, float sy){
        x = sx;
        y = sy;
        }
    };

struct seg{
    p 1, 2, mid, b;
    float length = 0.0f, m = 0.0f;
    void init_seg(p p1, p p2){
        1.init_p(p1.x, p1.y);
        2.init_p(p2.x, p2.y);
        length = sqrt((1.x - 2.x)^2 + (1.y - 2.y)^2);
        mid.init_p((1.x + 2.x)/2, (1.y + 2.y)/2 );
        m = ((1.y - 2.y)/(1.x - 2.x));
        b.init_p(0, (1.y - (m*1.x)));
        }
};

このエラーが表示されるのはなぜですか? また、なぜこの 2 点だけなのですか?

4

1 に答える 1

1

エラーの 1 つのグループを次に示します。

float x=0.0f,y=0.0f;
float length = 0.0f, m = 0.0f;

Java や C# とは異なり、C++11 より前の C++ ではそのような初期化を行うことはできません。あなたの場合も不要です。 と の両方を設定する唯一のコンストラクターであるxためy、設定しているゼロはとにかく上書きされます。

ここに別のエラーがあります:

p 1, 2, mid, b;

文字またはアンダースコアで始まらない識別子は使用できません。これはおそらく

p p1, p2, mid, b;
于 2012-11-16T01:38:53.993 に答える