2014-11-10 3 views
0

총 3 개의 클래스가 있습니다 ...
1. Source.cpp (주 기능 위치)
2. 내 모든 변수를 선언 한 곳에서 Variables.cpp는 거의 무의미합니다) 나는 기능이 Source.cpp의 주요 기능) 주에서두 클래스에서 같은 개체를 사용하려면 어떻게해야합니까?

에서 실행할 수 있도록
3. Functions.cpp & .H는 (내가 Functions.cpp이

#include <iostream> 
#include <cstdlib> 
#include "Variables.h" 
#include "Functions.h" 
#include <ctime> 
using namespace std; 

    Variables vari; 
    Functions func; 

int main(){ 
cout << "\n\n>>> "; 
     cin >> vari.answer; 
     func.choiceChecker(); 
} 

을 가지고 있습니다 이

Variables vari; 
void Functions::choiceChecker(){ 

     if (vari.answer == 1){ 
      scenario1(); 
     } 
     else{ 
      cout << "Failed"; 
     } 
    } 

시나리오 1 기능을 실행하는 대신 항상 출력이 실패합니다. 나 또한 두 가지 오류가 발생합니다.

1. 오류 1 오류 LNK2005 : Source.obj C : \ Users ... \ Desktop \ Projects \ ConsoleApplication1 \ ConsoleApplication1 \ Functions에 이미 정의 된 "class Variables vari"(변수 @@ 3VVariables @@ A). OBJ의 ConsoleApplication1

2.Error이 오류 LNK1169 : 하나 이상의 곱하기 정의 기호는 C를 발견 : \ 사용자 ... \ 바탕 화면 \ 프로젝트 \의 ConsoleApplication1 \ 디버그 \되는 ConsoleApplication1.exe의 ConsoleApplication1

나는를 사용하여 시도했다 Functions.cpp의 새 개체, 오류가 발생하지 않지만 동일한 값을 가져 오지 않습니다.

cin >> vari.answer; 
+2

전역 전역을 피할 것을 강력히 권장하지만, [**이 질문 **] (http://stackoverflow.com/questions/15841495/the-usage-of-extern-in-c)이 도움이 될 수 있습니다. 가능하면. – WhozCraig

+0

헤더에 변수를 모두 선언하지 않는 것이 좋습니다. 가능한 한 로컬로 유지하십시오. 매개 변수를 사용하고 값과 클래스를 반환합니다. – chris

+1

키워드 'extern'을 사용하여 다른 소스 (.cpp) 파일에서 이미 선언 된 변수를 참조 할 수 있습니다. 일반적으로 이러한 파일을 번역 단위 *라고 부릅니다. – didierc

답변

0

하나의 전역 변수를 사용하려면 한 번 선언 한 다음 한 번 정의해야합니다 (WhozCraig는 this question의 설명과 연결됨).

다음은 당신의 상황에서 작동합니다 :

  • 합니다 (Variables 클래스 또는 구조체의 선언 아래) Variables.hextern Variables vari;를 추가합니다. Variables.cpp 하단에서
  • #include Variables.h을 제거 (Functions.h가 이미 포함되어 있기 때문에) 당신이

이제 모두 Functions.cppvari을 사용할 수 있어야 Source.cpp에서 #include Variables.h

  • 를 추가 Functions.h에서 Variables vari;
  • 를 추가 및 Source.cpp.

  • 관련 문제