2012-04-11 4 views
3

컴파일러에서 정의한 네임 스페이스를 찾지 못했습니다. 네 개의 파일과 세 개의 네임 스페이스가 있습니다.컴파일러에서 네임 스페이스를 찾을 수 없습니다.

charon.cpp

chin.cpp

chout.cpp

MAIN.CPP

내 네임 스페이스 카론되어, charon_in 및 charon_out. 주요한 문제는 특정 파일 인 charon.cpp에서 발생합니다. 따라서이 파일과 chin.cpp도 있습니다.

오류 :

g++ -c -g -MMD -MP -MF build/Debug/GNU-Linux-x86/sys/charon.o.d -o build/Debug/GNU-Linux-x86/sys/charon.o sys/charon.cpp 
sys/charon.cpp:6:17: error: ‘charon_in’ is not a namespace-name 
sys/charon.cpp:6:26: error: expected namespace-name before ‘;’ token 
sys/charon.cpp:7:17: error: ‘charon_out’ is not a namespace-name 
sys/charon.cpp:7:27: error: expected namespace-name before ‘;’ token 
sys/charon.cpp:15:5: error: ‘chout_’ does not name a type 
sys/charon.cpp:16:5: error: ‘chin_’ does not name a type 
sys/charon.cpp: In constructor ‘charon::charon_::charon_()’: 
sys/charon.cpp:31:39: error: ‘chin_’ has not been declared 
sys/charon.cpp:31:55: error: ‘engine_input’ was not declared in this scope 
sys/charon.cpp:32:40: error: ‘chout_’ has not been declared 
sys/charon.cpp:32:57: error: ‘engine_output’ was not declared in this scope 

charon.cpp

#include <iostream> 
#include <boost/thread.hpp> 
#include <boost/date_time.hpp> 

using namespace std; 
using namespace charon_in; 
using namespace charon_out; 

namespace charon 
{ 

    class charon_ 
    { 
    private: 
    chout_ engine_output; 
    chin_ engine_input; 
    boost::thread input_thread; 
    boost::thread output_thread; 
    void start_threads(); 
    void stop_threads(); 

    public: 
    charon_(); 
    charon_(const charon_& orig); 
    ~charon_(); 
    }; 

    charon_::charon_(){ 
    input_thread = new boost::thread(&chin_::refresh, engine_input); 
    output_thread = new boost::thread(&chout_::refresh, engine_output); 
    } 


}; 

chin.cpp

/* 
* File: chin.cpp 
* Author: josh 
* 
* Created on 08 April 2012, 10:00 
*/ 
#include <iostream> 
#include <borland/conio.h> 
#include <ncurses.h> 
#include <deque> 
#include <boost/thread.hpp> 

using namespace std; 
using namespace charon; 
using namespace charon_out; 

namespace charon_in 
{ 

    class chin_ 
    { 
    private: 
    bool pause; 

    iostream key_sequence; 
    deque<char> key_queue; 
    charon_* engine; 

    inline iostream grab(); 


    public: 
    chin_(const charon_& handle); 
    chin_(const chin_& orig); 
    ~chin_(); 

    void refresh(); 
    bool stop_check(); 
    }; 

    chin_::chin_(const charon_& handle) { 
    engine = handle; 
    pause = false; 
    } 
    chin_::chin_(const chin_& orig) { 
    } 
    chin_::~chin_() { 
    } 

    inline iostream chin_::grab(){ 
    iostream ret; 
    ret << getch(); 
    return ret; 
    } 
    void chin_::refresh(){ 
    while((kbhit() != 0) && (key_queue.size() < 10)) 
    { 
     char t = getch(); 
     key_queue.push_back(t); 
    } 
    } 
    bool chin_::stop_check(){ 
    return pause; 
    } 
}; 

그래서이 코드는, 내가 트리플 모든 것을 확인했다. 넷빈의 클래스 브라우저에서 네임 스페이스를 볼 수도 있습니다. 따라서 나는 네임 스페이스를 올바르게 선언했음을 101 % 확신합니다. 사실 저는 그것들을 모두 하나의 네임 스페이스로 사용했습니다. 그러나 문제가 있다고 생각해서 분리했습니다.

나는 몇 년 동안 코딩하지 않았지만 책과 인터넷을 꽤 열심히 공격했습니다. 내가 읽은 것에서는 내 네임 스페이스를 적절히 선언했을뿐만 아니라 using 문을 올바르게 배치했습니다. 게다가 여러 파일간에 동일한 네임 스페이스를 사용할 수 있어야한다는 것을 발견했습니다.

그래서 나는 어딘가에서 실수를 저질렀습니다. 그렇지 않으면 이것이 효과가있을 것입니다. 하지만 내가 말할 수있는 한 내가 아무 것도 만들지 않았다. 어떤 도움을 주시면 감사하겠습니다.

답변

5

당신은 using directive 전에 네임 스페이스를 선언하는 헤더 파일을 포함 (또는 다시 선언) 할 필요가 : 웨인 제대로 points out, 당신은 아마 포함, 다른 코드를 재구성 할

// using namespace test; // Error test is not known to be a namespace 
namespace test {} 
using namespace test;  // Fine -- test is known 

으로 헤더 파일은 선언을 포함하며 다른 번역 단위에 포함될 수 있습니다.

+0

대단히 감사합니다. –

3

.cpp 파일에 클래스 선언과 한정자가 있습니다. 클래스 선언을 .h 파일로 이동하여 클래스를 사용하는 적절한 파일에 포함시켜야합니다.

예를 들어, 다음을 chin.h로 이동하고 charin.cpp에 chin.h를 포함 시키십시오.

namespace charon_in 
{ 

    class chin_ 
    { 
    private: 
    bool pause; 

    iostream key_sequence; 
    deque<char> key_queue; 
    charon_* engine; 

    inline iostream grab(); 


    public: 
    chin_(const charon_& handle); 
    chin_(const chin_& orig); 
    ~chin_(); 

    void refresh(); 
    bool stop_check(); 
    }; 
} 
+0

아, 감사합니다. 나는 그 일을 피하기를 바랬지 만, 지금 그것이 효과가없는 이유를 확실히 이해할 수 있습니다. –

관련 문제