2014-11-03 13 views
0

이 오류가 발생하면 MSVS2010에서 '데이터 변수'는 무엇을 의미합니까? 내 코드에서 다른 곳에 정의 된 심볼을 선언한다고 생각했습니다.'데이터 변수'는 무엇을 의미합니까?

오류 C2365 : 'g_surf': 재정의; 이전 정의는 '데이터 변수'입니다.

분명히 이것은 int 또는 char을 의미 할 수 있습니다.
작업 예제를 따랐습니다.
심볼을 선언하기 전에 클래스의 정의를 포함해야했습니다.

#include classdef.h 

extern 키워드를 사용하여 stdafx.h에서 개체를 선언했습니다.

extern COriginal g_orig;//works 
extern CClass g_surf;//how is this declaration resulting in a 'data variable' type? 

(글로벌 공간에서) 코드 파일에서 클래스를 인스턴스화합니다. 오류가 발생한 곳입니다.

COriginal g_orig(CONST_ARGUMENT);//works 
CClass g_surf();//seen as redefinition. 

둘 다에서 속성이 필요하므로 다른 두 클래스에서 클래스를 만들었습니다.

여기에 대한 통찰력을 제공하지 않는 다른 재정의 질문을 찾을 수 있습니다. MSVS2010 또는 웹에서 '데이터 변수'의 의미를 찾지 못했습니다.

+0

'데이터 변수'그룹에 속하는 것은 무엇입니까? 그것은 어딘가에 정의되어 있습니까? 또는 그 중 일부가 정의되지 않은 경우 오류 진술이 의미하는 바를 기억합니까? – Jaden

답변

2

매개 변수없이 생성자를 호출했을 것입니다. 컴파일러를 들어

CClass g_surf; 

,이 라인

CClass g_surf(); 

는 매개 변수를 고려하지 않으며 CClass을 반환 g_surf라는 방법의 전방 선언입니다.

+0

전체 재정의 부분에 초점을 맞추는 대신 데이터 변수가 의미하는 바를 알아야 할 필요가 생겼기 때문에 어리석은 것처럼 보입니다. – Jaden

+0

http://stackoverflow.com/questions/1424510/most-vexing-parse-why-doesnt-a-a-work – drescherjm

+0

글쎄, "아마도 당신이 의미하는"추측입니다. 하지만 컴파일러는 당신이 의미하는 바를 짐작하지 않습니다. 그냥 잘못되었다는 것을 알려줍니다. – nvoigt

0

'데이터 변수'에 클래스 유형으로 선언 된 기호가 포함 된 것처럼 보입니다.
그래서 심볼의 유형을 다른 것으로 재정의하려고했습니다.
동일한 기호를 사용하여 함수를 선언하려고했습니다.

내가 코드에서 실수로 사용한 것은 클래스를 인스턴스화 할 때 기호 이름에 괄호를 추가하는 것이 었습니다.