2012-11-26 2 views
3

C++로 텍스트 기반 RPG를 만들고 있습니다. 동일한 오류 팝업이 반복되는데, 근본적으로 잘못된 것을하고 있습니다. ,하지만 나는 무엇을 모르겠다. 검색은 특정 컴파일러 오류에 대한 해결책을 제시했지만 필자가 작성한 코드를 수정하는 데 사용할 수있는 것은 아닙니다.C++에서 별도의 함수로 변수 간의 통신을 설정할 수 없습니다.

질문 답변을 원합니다 : 어떻게 포인터를 사용하여 별도의 함수간에 변수 통신이 가능합니까? 즉, 포인터를 사용하여 변수의 값을 가리킬 수 있으므로 선언되지 않은 함수에서 해당 값을 사용하고 조작 할 수 있습니까?

TL 버전 : "exp"int 변수가 포인터를 사용하여 외부 함수와 통신하도록하려고합니다.

파일 charlvl.cpp에서 :가 여기에 내가 가진 문제가있어 코드의 약간의 : 나는 오류가

롱 버전 "ISO C++ 포인터와 정수 [-fpermissive]의 비교를 금지"

... 
int lvl = 1; 
int *exp = 0;//value I want communicated to main() 
int str = 0; 
int vit = 0; 
... 
파일 fight.cpp (MAIN.CPP)에서

:

... 
//you've just killed a monster 

cout << "\nThe monster drops to the ground." << endl; 
cout << "You gained " << expValue << " experience!" << endl; 
&exp += expValue;//&exp is the character's experience. 

//expValue is the exp gained upon monster death 
//*exp (from charlvl.cpp) is the value I want to communicate to here. 

그것은 여기 선언되지 않은,하지만 charlvl.cpp있다. 전역 변수를 사용하지 않고도 charlvl.cpp의 선언 된 변수와 main() 사이의 통신을 설정하려면 어떻게해야합니까?

+1

'* exp + = expvalue' 나는 당신이 찾고있는 것이라고 생각합니다. –

+0

변수가 전역 변수 또는 함수 내에서 선언되어 있습니까? 포인터에 메모리를 할당합니까? 변수가 전역 변수 인 경우 왜 포인터를 사용해야합니까? 다른 소스 파일에서 변수를 'extern'으로 선언 할 수 있습니까? 명백한 구문 오류 외에도이 질문에 올바르게 대답하기에 충분한 정보가 없으므로 완전한 코드를 게시하십시오 (팁은 http://sscce.org/ 참조). –

답변

0

&* 연산자를 혼동스러워했습니다. *int*int으로 바꾸고, &int*int**으로 바꾼다.

이 당신이 원하는 무엇인가 :

(*exp) += expValue; 

당신은 참조를 사용하는 것을 고려 할 수 있습니다.

2

exp를 전역 포인터로 정의한 경우 통신 기능에 대해 생각할 필요가 없으며 단순히 다른 기능에서 사용할 수 있지만 사용 방법이 잘못되었습니다. * 수단이 내게 그 포인터의 내용을 얻을 수 있기 때문에

&exp += expValue;

*exp += expValue;

로 변경해야합니다.

btw, 포인터가 작동하는 것처럼 exp를 정의하지 마십시오. 모든 exp을 기반으로 exp += expValue;

int exp = 0;

글로벌 VAR 또는 글로벌 포인터이다.이 같은 함수를 정의한 경우

:

void func() 
{ 
    int *expPtr = 0; 
    int exp = 0 
} 

그리고 다른 기능에

void use() 
{ 
    // trying to use expPtr or exp. 

} 

내가 아는 방법을 사용 할 수 있습니다 :

1, 로컬 var를 사용하고 func()에 반환하지만 반환 된 var는 복사본 일뿐입니다.

int func() 
{ 
    int exp = 0; 
    exp++; 
    return exp; 
} 

2 로컬 포인터를 사용하여 메모리를 할당 한 다음 포인터를 반환하거나 새 메모리를 전역 포인터에 할당합니다. 그러나 메모리 누수에주의하십시오. 사용하지 않는 즉시 삭제해야합니다.

int * func() 
{ 
    int *expPtr = 0; 
    expPtr = new int(2); 
    return expPtr; 
} 
+0

감사합니다. 이후 exp와 expValue 및 몇 가지 다른 문제 변수를 네임 스페이스에 넣었습니다. 그러면 모든 문제가 해결되었습니다. 어떤 이유에서든 전역 변수를 선언하는 것이 싫어서 포인터를 사용하는 이유와 내 자신의 교육에 대해서도 마찬가지입니다. 내가 작은 프로그램에서 정확히 시도했는데 올바른 포인터 구문을 사용하더라도 "변수가이 범위에서 선언되지 않았습니다"라는 오류를 계속해서 받았지만 주위의 기호를 변경하려고합니다. –

+0

Um ... 전 세계의 vars를 사용하지 않는 것이 OOP 정신이라고 생각합니다. 나는 순수 OOP를 사용하는 것이 아니라 무엇이든 사용하는 것을 믿습니다. – shengy

관련 문제