본문 바로가기

ns3

[ns3, C++] 'MyApp' was not declared in this scope 문제 해결 - 헤더파일 include에 문제가 없음에도 에러가 뜬 경우 (IFNDEF)

실험을 위해 ns3에서 새로운 application를 개발하고있다.

개발하다보니 여러개 app이 필요했는데, udp-client, udp-server app을 비롯한 관련 cpp파일과 header파일을 거의 복사해서 myapp 개발에 사용하고있다.

첫번째 myapp은 개발 후 테스트하니 성공적으로 서버와 클라이언트 간의 Tx, Rx가 모두 되었는데 똑같이 복사해서 만든 두번째 myapp2도 함께 install해서 테스트하니 실패했다.

분명 새로만든 helper, model 헤더를 소스파일에 잘 추가했고, wscript파일 등에도 모두 추가했는데.. 

새로 만든 MyApp이 declare되지 않았다고 떴다,,

 

여기까지가 문제 배경이고 원인과 해결법은 아래와 같았다.

원인: udp-client-server-helper.h 상단에 #IFNDEF UDP_SERVER_H .. 와 같은 문장이 있었는데 이 부분은 새로 만든 Myapp에 맞게 바꾸지 않았던것이다.

따라서 메인 포함된 소스파일에서 두개 중 한 MyApp이 빌드되는동안 udp-server.h가 추가되고, 두번째 MyApp2가 빌드될 때에는 저 IFNDEF 문장을 만나버려 그냥 MyApp2를 빌드하지않고 ENDIF까지 pass한것.. (IFNDEF문을 만났는데 만약 파라미터가 이미 define되어있다면 ENDIF를 만날때까지 pass해버림.) 그래서 나는 MyApp2는 define되지 않았음에도 udp-server가 있다고해서 넘어가게 된 어이없는 에러였다. 

그래서 당연히 두번째 app은 빌드하지 않았기 때문에 main에서 해당 app이 declare되지 않았다고 뜬 것이었다

해결법: 새로만든 MyApp, MyApp2의 helper header file에 #IFNDEF 부분을 수정하니 해결