2012-07-16 3 views
0

다른 .cpp 파일에서 하나의 .h 파일에서 데이터 (또는 함수)를 사용하려고하는데 연결 오류를 제안하는 컴파일러 영역이 나타납니다. 나는 이것이 정말로 간단 할 것이다라는 것을 알고있다. 그러나 나는 그것으로 나 자신을 아프게하고있다. Xcode를 사용하고 있지만, 문제는 아니라고 생각합니다. 조금 생각하고있을 가능성이 훨씬 큽니다!둘 이상의 .cpp에 같은 헤더 포함

내 버전이 더 복잡하므로 찾고자하는 것 중 매우 간단한 예를 사용합니다. 내가 헤더 파일 data1.h이있는 경우

:

int a,b; // etc 

그러던 어느 .cpp 파일을 setdataA.cpp 말 :

#include "data1.h"  
void set_a(int numb){ a=1;} 

그런 다음 또 다른 말 setdataB.cpp :

#include "data1.h"  
void set_b(int numb){ b=10;} 

나는 내가 뭘 잘못하고 있는지 궁금해하고 있습니다. 그런 일을하려고 노력해야하는 것일 수도 있습니다.

이 난

#include "setdataA.h" 

하고 여전히 작동하지 않습니다에 setdataB.cpp에

#include "data1.h" 

를 교환하는 것을 시도했다!

답변

1

내가 잘못한 것을 알았습니다. 실제로 헤더 파일이 실제로 어떻게 작동하는지 오해 한 것입니다. 내가하려고했던 것이 너무 단순하거나 초보적 인 사람들이었습니다. (저에게 답한) 사람들이 실제로하려고했던 것에 착각했습니다 (나는 그들에게 사과합니다) .

내가해야 할 일은 data1입니다.CPP는 다음

int a; 
int b; 

void set_a(int numb) { a=numb; } 
void set_b(int numb) { b=numb; } 

int get_a() { return a } 
int get_b() { return b } 

을 넣어 data.h에 원 및 설정하거나 또는 B의 점점 그냥 의해 달성 될 수 data.h는 다음과 같은 여러 파일에 포함 할 수

void set_a(int numb); 
void set_b(int numb); 

int get_a(); 
int get_b(); 

넣어 함수의 값을 직접 변경하거나 호출하지 않고 함수 중 하나를 호출하는 것.

사람들이이 문제를 해결하는 데 도움이되기를 바랍니다.

(오랜 시간 동안 돌아 오지 않아서 유감스럽게 생각합니다. 질문을 할 때 내 지식 부족에 대해 부끄러워하는 것이 너무 초현실적이었을 때 약간 당황했습니다. 그리고 두 번째로 이것은 스택에 대한 나의 첫 번째 질문이었습니다. 제 질문이 제가 요구 한 것에 더 많은 아이디어를 줄 수 있다고 생각할 수도 있습니다.)

-1

나는 이것에 관해서는 녹슨 것이지만 이미 포함되어있는 파일을 포함 할 때마다 링크 오류가 발생한다고 생각합니다. 귀하의 예를 들어 보면이 경우에는 보이지 않지만 파일을 자세히 살펴보십시오. 이 예제에서는 오류가 발생합니다. file1.h에는 file2.h가 포함되고 file3.h에는 file1과 file2가 모두 포함됩니다. 이 경우 file2는 file3에 두 번 포함됩니다.

5

먼저 실제 오류를 제공하면 도움이됩니다.

#ifndef MY_UNIQUE_INCLUDE_GUARD 
#define MY_UNIQUE_INCLUDE_GUARD 
... // header contents 
#endif 

셋째, 문제는 아마 인의 int A와 B에 의해 포함 통해 (모두의 .cpp 파일에 정의되고 있음 :

둘째,이 같은 INCLUDE GUARD와 헤더 내용을 포장한다 헤더)를 사용하여 여러 개의 정의 된 기호가됩니다.

대신, 당신은 아마 그들을 정의하지 않고 헤더를 선언하는 의미 : 그럼

extern int a; 
extern int b; 

을의 .CPP 파일에 그들을 정의 :

int a; 
int b; 

을 그냥 정확히 하나를 정의 .cpp 파일. 하나의 .cpp 파일에서 a를 정의하고 다른 .cpp 파일에서 b를 프로젝트에 적합한 경우 정의 할 수 있습니다.

+0

안녕하세요 mlepage, 오류는 "clang : error : 링커 명령이 종료 코드로 실패했습니다. 1 (호출을보기 위해 -v 사용) ". 문제를 약간 잘못 설명했을 수도 있습니다. 필자는 하나 이상의 파일로 모두 액세스 할 수있는 파일에 데이터와 함수를 갖고 싶었습니다. 그래서 내 예제는 두 .cpp 파일 모두 ints a 및 b 사용하려면합니다. – user1529408

관련 문제