2011-08-12 3 views
1

샘플 1>여러 선언 및 여러 초기화 오류를 수정하려면 어떻게합니까?

namespace Exercise { 
    int ivar = 0; 
} 

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

오류 C2874가 : 사용-선언 '운동 :: 바르'

샘플 내가 이러한 오류를 이해하는 어려움이 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

꽤 명확인가가, 같은 이름으로 다시 초기화했습니다.

ivar=0; 첫 번째 예제 (예제 1)에서 ivar은 이미 Excercise 네임 스페이스에 있음을 컴파일러에서 확인했습니다.

이에 샘플 1을 변경할 수 있습니다

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

두 번째 샘플은 당신에게 훈련으로 남아 있습니다. 또한 변수 이름이 복제됩니다.

초기화가 필요하면 다시 시도하고 다시 초기화하십시오.

1

using은 현재 네임 스페이스에 지정된 항목을 가져옵니다. 따라서 샘플 1에서는 ivar이라는 항목을 얻을 것이므로 ivar을 호출하려는 로컬 변수와 충돌합니다.

0

기존 변수를 설정 하시겠습니까? 그런 다음 다시 정의하지 마십시오.

using Exercise::dvar; 
dvar = 3.1416; 
관련 문제