2011-04-28 55 views
8

一切運作良好,直到我把從主文件中的一些代碼到一個新的類的第一個定義的話,我有以下錯誤:編譯錯誤「‘結構’類型定義」雖然這是它

error C2011: 'color1' : 'struct' type redefinition

struct color1 
{ 
    color1() 
    { 
     red = green = blue = 0; 
    } 

    color1(float _red, float _green, float _blue) 
    { 
     red = _red; 
     green = _green; 
     blue = _blue; 
    } 

    float red, green, blue; 
}; 

任何想法?

+2

參見例如http://stackoverflow.com/questions/2979384/purpose-of-header-guards – Erik 2011-04-28 21:13:48

+1

它可能在一個包含兩次的文件中。將雜注警衛添加到它所在的文件中。 – 2011-04-28 21:14:43

+1

顯然,您的程序比此更多。您是否可以將您的程序縮減爲顯示您所看到的錯誤的最小程序,然後在此處發佈該程序? – 2011-04-28 21:15:09

回答

42

如果編譯器說它被重新定義,那麼它可能是。

我的心理調試技巧告訴我,您已將源文件的結構從頭文件移動到頭文件,並忘記頭文件中包含的守護程序,然後多次將其包含在源文件中。

編輯:作爲一般規則,我通常建議避免前導下劃線。在某些情況下(例如後跟一個大寫字母),它們被保留用於執行,最簡單的方法是從不使用前導_,而不是希望您記住所有規則。

+3

+1表示可能的答案,另一個表示下劃線的建議+1。不幸的是,總的上限爲+1。 – 2011-04-28 21:17:55

+2

+1表示避免前導下劃線的建議。由於我不清楚的原因,我看到很多程序員在類似的方法(但總是合法且不那麼危險)時會繼續使用這些名稱,例如在最後添加它們。 – 6502 2011-04-28 21:19:40

+0

你是對的:(偷偷重新考慮了結構! – 2016-04-18 06:20:51

11

從上面的代碼片段我無法推斷出某些錯誤。

但通常這個錯誤意味着您多次包含相同的頭文件。你不忘記爲包含文件添加標準的衛兵嗎?

#ifndef MY_HEADER_FILE_ 
#define MY_HEADER_FILE_ 

// here is your header file code 

#endif 
+0

我給你+1,如果你刪除領先的下劃線... – 2011-04-28 21:24:27

+0

@Oli查爾斯沃斯:我看了上面的答案,這聽起來是合理的。也從我自己的代碼中刪除它們)) – beduin 2011-04-28 21:27:12

3

您可以在頭文件中定義結構。 有

#pragma once 

在這裏的結構是指頭部的開始,它解決了這個問題。

相關問題