2014-02-17 2 views
2

g ++로 컴파일하려고하면 링크 된 목록에 대한 코드를 작성하고 있는데이 이상한 오류가 발생했습니다.정의되지 않은 참조 동일한 파일에 이미있는 변수에 대한 링커 오류

/cygdrive/c/Users/Blas/AppData/Local/Temp/ccEcixjp.o: In function `Node': 
/cygdrive/c/Users/Blas/Documents/blas.borde/trunk/Cs170/Lab6/List.h:50: undefined    
reference to 'CS170::ListLab::Node::nodes_alive' 
/cygdrive/c/Users/Blas/Documents/blas.borde/trunk/Cs170/Lab6/List.h:50: undefined    
reference to 'CS170::ListLab::Node::nodes_alive' 
/cygdrive/c/Users/Blas/Documents/blas.borde/trunk/Cs170/Lab6/List.h:56: undefined    
reference to 'CS170::ListLab::~Node::nodes_alive' 

는 그리고이 이상한 것은 내가 이미 링커가 변수가 정의되지 않은 것을 말한다 왜 그렇게 나도 몰라 nodes_alive 정의하고 있다는 것입니다 내 코드

namespace CS170 
{ 
    namespace ListLab 
    { 
    struct Node 
    { 
     int number;    // data portion 
     Node *next;    // pointer to next node in list 
     static int nodes_alive; // number of nodes still around 

     // Non-default constructor 
     Node(int value) 
     { 
     number = value; 
     next = 0; 
     nodes_alive++; // a node was created 
     } 

     // Destructor 
     ~Node() 
     { 
     nodes_alive--; // a node was destroyed 
     } 
    }; 
    } 
} 

입니다. 어쩌면 제가 실종되었다는 것이 명백 할 수도 있습니다. 제발, 도와주세요.

+1

여기서'nodes_alive'를 정의합니까? 이것은 정적 멤버 변수이므로 struct 내부에 * 선언하지만 * 외부에 정의해야합니다. – Beta

답변

3

클래스 정의에서 정적 데이터 멤버 node_alive 만 선언했지만 클래스 외부에서는 정의하지 않은 것처럼 보입니다. 글로벌 네임 스페이스의 일부 모듈에서

int CS170::ListLab::Node::nodes_alive; 

또는 암시 적으로 0으로 초기화됩니다 있지만

namespace CS170 
{ 
    namespace ListLab 
    { 
     int Node::nodes_alive; 
    } 
} 

당신이 명시 적으로 정의의 초기화로 0을 지정할 수 있습니다 쓰기.

+0

이제 작동합니다. 그것을 정의하는 걸 잊었 어, 고마워. – blastxu

관련 문제