2016-08-29 24 views
-1

error: must use "struct" tag to refer to type 'point'如何在C中實現一個帶有兩個浮點數的結構體?

我想要做的就是將座標存儲爲結構體。 這似乎非常簡單,但我不能在訪問20個網站並搜索Kernaghan的書後做到這一點。

我缺少什麼?

#include <stdio.h> 

int main() 
{ 
    struct point 
    { 
     float x; 
     float y; 
    }; 

    point.x = 0.0; 
    point.y = 1.9; 

    return 0; 
} 
+0

你有一個* type *'struct point',但是你沒有這個類型的變量。 –

+1

這只是一個建議,但如果您想在不同的函數中創建該結構的對象,則應該在主函數之外定義您的結構類型。 –

回答

4

您定義了一個名爲struct point的類型,而不是使用該定義的變量名稱。你會希望使用該類型要麼定義結構的實例:

struct point mypoint; // In C, you could change mypoint to point, but that gets confusing 

或(較少見)通過將名稱的結構後,用型(可能是匿名)的結構定義的變量聲明在分號前定義:

struct { 
    float x; 
    float y; 
} point; 
1

您需要有一個結構對象,即實例化結構。

struct point obj; 
obj.x = 0.0; 
obj.y = 1.9; 

其它選項是

struct point // Note,structure is tagged 'point' which enables multiple instantiations 
    { 
     float x; 
     float y; 
    }obj; 

struct // Anonymous structure with one & only one instance possible 
    { 
     float x; 
     float y; 
    }obj; 

終於typedef這也是一種常見的做法

typedef struct point 
{ 
    float x; 
    float y; 
}point; 

point obj; 
obj.x = 0.0; 
obj.y = 1.9; 
2

「點」 在您的examp le是一個結構標記,而不是變量名稱。您已聲明類型,名稱爲struct point,但不包含具有該類型的任何變量。如果這一聲明是在範圍上,你可以用形式

struct point my_point; 

聲明具有類型變量,然後分配給其成員爲

my_point.x = 0.0; 
my_point.y = 1.9; 
3

所有你聲明是命名struct point ;您尚未創建名爲point對象進行操作。你需要一個單獨的對象定義,無論是寫作:

struct point { 
    float x; 
    float y; 
}; 

struct point pvar; 

struct point { 
    float x; 
    float y; 
} pvar; 

,那麼你可以操縱對象的成員:

pvar.x = 0.0; 
pvar.y = 1.9; 

1

什麼你所做的,類似於說int = 3;這更像是它:

#include<stdio.h> 

int main(void) { 
    struct point { 
     float x; 
     float y; 
    } s; 

    s.x = 0.0; 
    s.y = 1.9; 

    return 0; 
} 

但是你應該看到的編譯器警告,因爲代碼分配doublefloat。除非你被迫,否則最好不要使用劣等float類型。

相關問題