저는 C++의 초보자이며 한 번에 두 개 이상의 네임 스페이스를 처리하는 방법을 이해하는 데 어려움을 겪고 있습니다. 내 MVC 응용 프로그램에서 컨트롤러는 동작을 전달하기 위해 컨트롤러에 대한 참조가 필요하고 컨트롤러는 일부를 표시하기 위해 뷰에 대한 참조가 필요합니다.C++ 네임 스페이스/식별자 문제
나는 거의 모든 것을 내 응용 프로그램에서 제거했으며, 아직 nomespace 및 선언되지 않은 식별자에 대한 많은 컴파일 오류가 있습니다. 이것은 제거 코드 :
#ifndef _geometria
#define _geometria
namespace core_stuff {
/*this namespace contains Model and Controller */
class Model {
public:
Model();
//void doSomething();
};
class Controller {
public:
Controller();
void setView(ui_stuff::View v);
};
}
namespace ui_stuff {
/*this namespace contains View and other UI classes libraries, not included here because I am semplifying the whole stuff */
class View {
public:
View();
void setController(core::Controller c);
};
}
#endif
이는 구현입니다 :
#include "geometria.h"
#include <iostream>
//implementation of core_stuff namespace
core_stuff::Model::Model() { }
core_stuff::Controller::Controller() { }
void core_stuff::Controller::setView(ui_stuff::View v) {
//do some kind of operation in my view
}
//implementation of ui_stuff namespace*/
ui_stuff::View::View() { /* */ }
void ui_stuff::View::setController(core_stuff::Controller c) {
//do some kind of operation on the controller
}
/* main */
int main (int nArgs, char* args[]) {
core_stuff::Model m;
core_stuff::Controller c;
ui_stuff::View v;
v.setController(c);
c.setView(v);
}
컴파일 오류의 아주 긴 목록의 첫 번째는 헤더 파일에
void setView(ui_stuff::View v);
라인을 포함한다 , ui_stuff 네임 스페이스에 액세스 할 수 없습니다.
줄 (20) : 오류 C2653 : 'ui_stuff'는 ac의 이름이 아닙니다. lass 또는 네임 스페이스
어떻게 해결해야합니까?
네임 스페이스'core_stuff' 전에 네임 스페이스'ui_stuff'을 이동하십시오. –
Aloks 주석에 대해 자세히 설명하기 위해 C++가 순서대로 파싱됩니다. 그것은 전체 파일을 읽지 않고 형식을 알아 내려고 시도합니다. 순서대로 있어야합니다. – dutt
당신이 함수를 할 수있는 것처럼 네임 스페이스를 정의한 다음 선언하면 순서에 대해 걱정할 필요가 없습니까? – TopGunCoder