2014-01-22 2 views
0

클래스의 인스턴스를 가리키는 포인터를 함수가 다른 클래스에있는 함수로 전달하여 함수가 일부 객체에 액세스 할 수있게해야합니다 첫 번째 클래스의 변수.C++ 다른 클래스에서 함수를 가리키는 (객체를 가리키는) 포인터 전달

비록 내가 C++에 익숙하지는 않지만이 방법으로 포인터를 사용한 처음이므로이 작업을 수행하는 방법을 이해하지 못합니다. 이미 수행 한 어떤

은 다음과 유사 클래스 바에서

class foo 
{ 
public: 
    int data; 
}; 

class bar 
{ 
public: 
    void function(foo *ptr); //error points to this line 
}; 

void bar::function(foo *ptr) 
{ 
ptr->data = 1; //do something with data inside foo class. 
} 



main() 
{ 

foo foo1; //init foo as foo1. 

foo *ptr_foo; //pointer of type foo called ptr_foo 

prt_foo = &foo1; //point ptr_foo to the address of foo1 

bar bar1; //init bar as bar1 

bar1.function(ptr_foo) //call function1 and pass the address of our instance of foo to it. 

} 

임 점점 오류 "구문 오류 : 식별자 'foo는'"말하는 기능 (foo는 *의 PTR)를 정의하는 라인에.

main()에서 함수 (foo ptr *)를 호출 할 때 "bar :: function ': 함수가 1 개의 인수를 취하지 않음"오류가 발생합니다. 첫 번째 오류에 링크 된 것 같습니다. 예 ?

프로그램에서 나는 foo(), bar() 및 main()이 모두 헤더 파일과 연결된 여러 소스 파일에 있습니다. 이게 내 문제를 일으키는거야?

이 컨텍스트에서 포인터를 이해하기가 어려우며이 특정 문제를 해결하는 데 독서가 필요하지 않습니다.

누가이 작업을 훌륭하게 수행 할 수 있는지 말해 줄 수있는 경우 솔루션에서 주어진 문제에 대한 설명과 내가 수행 한 것이 작동하지 않는 이유가 더 좋을 것입니다.

도움 주셔서 감사합니다.

편집 : 위의 코드는 컴파일하지 않습니다. 내 실제 코드는 합리적으로 게시 할 수있는 것보다 훨씬 큽니다.

+2

컴파일하려고 시도 할 수있는 실제 코드를 게시 할 수 있습니까? – juanchopanza

+0

'prt_foo'가 선언되지 않았습니다. 'ptr_foo'가 있습니다. – WhozCraig

+1

'main'에 리턴 타입을 추가하고'prt_foo'를'ptr_foo'로 수정하고'main'의 마지막 라인에 세미콜론을 추가하면 잘 컴파일됩니다. –

답변

0

명백한 오타가 고정되면 당신이 컴파일을 게시 한 코드를.

아마도 실제 코드에서 bar.hclass foo;이라는 선언을 전달하지 않으므로 컴파일러에서 말하는대로 foo이라는 선언이 없습니다. 헤더가 복잡한 작업을 수행해야하는 경우이를 수행하거나 아니면 foo의 전체 정의를 포함해야합니다.

또는 아마도 foo.hbar.h은 모두 서로 포함하려고 시도합니다. 불가능합니다. 이 경우 하나 또는 둘 모두를 제거하고 필요에 따라 포워드 선언으로 대체 할 수 있어야합니다.

아무 것도 도움이되지 않는다면 간단한 테스트 케이스로 코드를 줄여보십시오. 으로 오류를 재생합니다. 그렇게 할 때 문제의 원인을 발견하지 못하면 여기서 좋은 테스트 사례를 게시 할 수 있습니다.

+0

도움을 주셔서 감사합니다. 문제는 실제로 선언 오류입니다. – Samathy

0

class bar을 정의하는 파일은 class foo에 대해 알 수 없음을 나타냅니다. class bar에 대한 정의보다 먼저 class foo의 헤더 파일이 필요합니다. foo는 바는 별도의 헤더에있는 경우

2

, 바 클래스 선언하기 전에 줄에 앞으로 선언을 추가

class foo; 
+0

이 문제가 해결되었습니다. 감사합니다! – Samathy

관련 문제