2012-11-16 173 views
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,僅中期和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))); 
     } 
}; 

爲什麼會出現此錯誤,爲什麼只有這兩點?

+8

1和2不允許作爲變量名稱。 – chris

+0

使用數字作爲標識符是非法的。將它們重命名爲「one」和「two」。 – Yuushi

回答

1

下面是一組錯誤的:

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

不像Java和C#,你不能做初始化一樣,在C++之前,C++ 11。在你的情況下,它也是沒有必要的:唯一的構造函數你同時設置了xy,所以你設置的零將被覆蓋。

這裏是另一個錯誤:

p 1, 2, mid, b; 

不能使用不以字母或下劃線開頭的標識符。這應該是

p p1, p2, mid, b; 
+0

它*可以*開頭,下劃線,這不是一個字母,不是說它應該。 – chris

+0

@chris你是對的,謝謝! – dasblinkenlight

+1

「成員智能初始化」現在允許從C++ 11開始Java。 – Potatoswatter