2010-04-14 2 views
3

main() 및 여러 호스트 클래스의 멤버 함수에서 사용할 수있는 수학 함수를 만들었습니다. 범위에서이 수학 함수를 전역으로 만드는 것이 가장 쉽다고 생각했지만 어떻게해야할지 모르겠습니다.전역 함수 선언 및 문제 해결 문제가 발생했습니다.

저는 현재 모든 기능을 Rdraws.cpp라는 파일에 Rdraws.h의 프로토 타입과 함께 넣었습니다. #includesexterns이 있더라도 main()의 첫 번째 함수 호출에서 "기호를 찾을 수 없음"컴파일러 오류가 발생합니다.

여기에 내가 가진 무엇 :

// Rdraws.cpp 
#include <cstdlib> 
using namespace std; 
#include <cmath> 

#include "Rdraws.h" 
#include "rng.h" 

extern RNG rgen // this is the PRNG used in the simulation; global scope 

void rmultinom(double p_trans[], int numTrials, int numTrans, int numEachTrans[]) 
{ // function 1 def 
} 

void rmultinom(const double p_trans[], const int numTrials, int numTrans, int numEachTrans[]) 
{ // function 2 def 
} 

int rbinom(int nTrials, double pLeaving) 
{ // function 3 def 
} 

// Rdraws.h 

#ifndef RDRAWS 
#define RDRAWS 

void rmultinom(double[], int, int, int[]); 
void rmultinom(const double[], const int, int, int[]); 
int rbinom(int, double); 

#endif 

// main.cpp 
... 
#include "Rdraws.h" 
... 

extern void rmultinom(double p_trans[], int numTrials, int numTrans, int numEachTrans[]); 
extern void rmultinom(const double p_trans[], const int numTrials, int numTrans, int numEachTrans[]); 
extern int rbinom(int n, double p); 

RNG rgen; // global PRNG object created for simulation 

int main() { ... } 

내가 프로그래밍에 아주 새로운 해요. 이렇게하는 것이 현명하게 똑똑한 방법이라면, 나는 알고 싶습니다.


업데이트

나는 바보 그리고 난 여전히 내 컴파일러에 Rdraws.cpp을 포함하지 않았 몰랐어요. 포스터에서 언급했듯이 세미콜론도 잊어 버렸습니다.

여기에 설명 된 방법을 개선 할 수 있다면 나에게도 감사드립니다.

+0

Meh. 누군가 "꽤 프로그래밍에 익숙하지 않은"사람에게는 꽤 좋아 보인다. –

답변

2

어떤 컴파일러를 사용하고 있습니까? 먼저 모든 소스 파일을 오브젝트 파일로 컴파일 한 다음 모든 오브젝트 파일을 함게 링크해야합니다.

예 :

g++ -c -Wall -O2 main.cpp 
g++ -c -Wall -O2 Rdraws.cpp 

그리고 실행 파일을 얻을 수 ...

g++ -s main.o Rdraws.o 
+0

거룩한 ... 미안 해요, 나는 Rdraws.cpp를 컴파일에 포함시키지 않았습니다. 이제 Rdraws.cpp 오류 : 'void'앞에 예상되는 초기화 프로그램을 처리합니다. " – Sarah

+1

@ Sarah : 'extern RNG rgen'이후에 누락 된 세미콜론이됩니다. –

+0

@ Sarah : 첫 번째 'void'직전에 줄에 세미콜론을 두지 않았기 때문입니다.그것은 변수 선언이기 때문에 컴파일러는 초기화 자나 세미콜론을 찾고있었습니다. –

1

몇 가지 :

  • 난 아무데도 정의 된 변수 rgen 표시되지 않습니다 . 그것의 Rdraws.cpp에 선언되었지만 정의가 없습니다.
  • 최종 실행 파일을 얻을 수 main.oRdraws.o 다음 링크 그들에 별도로 컴파일 (단지 어떤 연결을 컴파일하지 않음)에 필요한 전역 변수와 기능 main.cppRdraws.cpp를 사용합니다.
0

Brian R. Bondy가 귀하의 answer 인 것처럼 보입니다. 필자는 main.cpp에 extern 함수 선언이 필요 없다는 것을 지적하고자합니다. 선언은 이미 포함 된 Rdraws.h 헤더 파일에서 이미 작성되었습니다.

+0

대단히 고마워! – Sarah