2011-08-12 29 views
1

樣品1>如何修復多個聲明和多個初始化錯誤?

namespace Exercise { 
    int ivar = 0; 
} 

int ivar = 0;  
using Exercise::ivar; // <<== error 

錯誤C2874:using聲明導致的自我鍛鍊::伊娃'

樣品2>

namespace Exercise { 
    double dvar = 0; 
} 

int main(int argc, char* argv[]) 
{ 
    using Exercise::dvar; 

    double dvar = 3.1416; // <<== error 
} 

error C2374: 'Exercise::dvar' : redefinition; multiple initialization 

我有困難,瞭解這些錯誤的倍數聲明。有人能給我一點細節嗎?

+5

錯誤信息是很清楚的給我。 – JonH

回答

2
namespace Exercise { 
    int ivar = 0; // create a new variable "::Exercise::ivar" 
} 
int ivar = 0; // create a new variable ::ivar; 
using Exercise::ivar; // add name "::ivar" to variable "::Exercise::ivar", but that name is taken! 

下一個例子:

namespace Exercise { 
    double dvar = 0; // create a new variable "::Exercise::dvar" 
} 
int _tmain(int argc, _TCHAR* argv[]) 
{ 
    using Exercise::dvar; // add name "::_tmain(...)::dvar" to variable "::Exercise::dvar" 
    double dvar = 3.1416; // create a new variable "::_tmain(...)::dvar", but that name is taken! 
} 
0

在名稱空間內部更改ivar和dvar通過在變量上附加一個字符或數字來運行,然後運行您的代碼。錯誤消息:

error C2374: 'Exercise::dvar' : redefinition; multiple initialization

是相當清楚的,你重新初始化使用相同的名稱。

在第一個示例(示例1)中,聲明瞭int ivar=0;,編譯器發現ivar已位於Excercise名稱空間中。

你可以改變樣品1到這一點:

namespace Exercise {  
     int ivar2 = 0; 
} 
int ivar = 0;  
using Exercise::ivar2; // <<== no error 

第二樣品留下作爲一個鍛鍊; Tibial你。另外,你的變量名稱是重複的。

如果您只需要初始化它們,請繼續並初始化它們,然後重新聲明它們。

1

using將指定的項目拉入當前名稱空間。所以在示例1中,您將得到一個名爲ivar的東西,所以這將與您嘗試撥打ivar的本地變量衝突。

0

是否要設置現有變量?那麼不要重新定義它。

using Exercise::dvar; 
dvar = 3.1416;