2015-02-05 1 views
0

저는 C++을 처음 사용하며이 프로그램을 실행하려고하면 "오류 LNK2001 : 해결되지 않은 외부 기호"private : static int Plate :: plate_nID "가 표시됩니다. 지금은 단지 플레이트 클래스를 생성하고 ID를 출력하려고 내가 잘못 어디로 갔는지 확실하지 여기 정적 클래스 변수를 사용하여 개체의 새 ID를 만들려고합니다.

#pragma once 
#include <string> 

using namespace std; 

class Plate{ 
    private: 
     int id; 
     string plateName; 
     static int plate_nID; 

     int generateID(){ 
     plate_nID++; 
     return plate_nID; 
     } 
    public: 
     Plate(string name){ 
     plateName = name; 
     id = generateID(); 
     } 
     ~Plate(){} 
     int getID(){ 
     return id; 
     } 
     string getName(){ 
     return plateName; 
     } 
}; 

은 내 주 :.. 나는이 질문을 보았다

#include "Plate.cpp" 
#include "PlateNode.cpp" 
using namespace std; 

int main(){ 
Plate s=Plate::Plate("p1"); 
cout << s.getID();} 

: Undefined reference to static class member 내 질문과 유사한 질문 eul은 dulpicates로 표시되어 있지만, 그렇게하려고 할 때 : 클래스 외부의 정적 멤버가 아닌 인스턴스를 생성 할 수 없습니다. 도와주세요!

+0

대체로'plate_nID'를'generateID' 함수 내에서 정적으로 만듭니다. (자체는 정적이어야합니다) –

+0

'Plate (const string & name)'과'const string & getName() const'을 생각해보십시오 –

답변

0

클래스 외부에 static 멤버 변수를 정의해야합니다. 의 라인을 따라 뭔가 : 당신은 당신의 클래스 외부 정적 변수를 정의 할 필요가

int Plate::plate_nID = 0; 
+0

어디에 넣어야합니까? –

+0

@ChrisMurphy, 그것은 클래스 외부의 .cpp 파일에 있어야합니다. –

+0

나는 그것을 Plate.cpp 파일 안에 넣으려고했으나 주 파일에서 플레이트를 인스턴스화하려고 시도했을 때 plate_nID가 이미 정의되어있다. –

1

, 그런 후에 만 ​​코드 작업

int Plate::plate_nID = 0; 

당신은 바람직 주요 외부 클래스 (외부로 정의해야합니다 ())

아마도 수업 직후에 정의하는 것이 좋습니다.

관련 문제