2010-02-17 4 views
1

안녕하세요. 내 클래스에 대한 C++ 할당 작업을하고 있습니다. 내가 거의 다하고 있지만, 이러한 오류 알아낼 수 없습니다링커 오류 - 확인되지 않은 외부 기호

error LNK2001: unresolved external symbol "public: virtual void __thiscall HasQuarterState::dispense(void)const " ([email protected]@@UBEXXZ) gumball.obj Gumball 
error LNK2001: unresolved external symbol "public: virtual void __thiscall SoldState::turnCrank(void)const " ([email protected]@@UBEXXZ) gumball.obj Gumball 
fatal error LNK1120: 2 unresolved externals C:\School Work\CS 492\Gumball\Debug\Gumball.exe Gumball 

내가 MSDN에 가서 LNK2001 오류가 고개를하지만, 정보의 압도적 인 양을 제공하였으며, 두려워 나는 알아낼 수 없습니다 MSDN 페이지를보고 C++에 대한 나의 제한된 경험을 통해 무엇이 잘못되었는지 알아보십시오.

하지만 문제는 내가 프로그램을 구성한 방식에서 비롯된 것이라고 생각합니다. 선생님은 우리가 원한다면 .cpp 파일 하나를 사용할 수 있다고했지만, 결국에는 Visual Studio/C++에 대해 충분히 알지 못했을 것입니다. 궁극적으로 나는 하나의 .cpp 파일을 사용하여 해결해야만했던 몇 가지 다른 문제에 봉착했다. http://codepad.org/LpBeJT2Y

그것의 큰 늙은 엉망 그러나 이것은 내가 무엇을했는지 있습니다 :

문제의 코드/파일은 여기

  • 정의

    • 는 GumballMachine (NO 정의)라는 이름의 클래스를 선언 상태라는 클래스 (차례대로 GumballMachine에 대한 포인터가 있음)
    • 상태를 상속하는 몇 가지 다른 상태 클래스가 정의 됨
    • 클래스 정의 GumballMachine
    • 다른 상태 클래스의 원래 정의에서 제외 된 여러 함수가 정의되었습니다. 이러한 기능은 GumbballMachine의 정의 된 기능에 의존하고 GumballMachine 기능이 정의 될 때까지 작동하지 않기 때문입니다.
    • 무효 메인()

    는 지금까지 내가 (VS/C++의 내 제한된 지식으로) 말할 수있는, 코드가 잘 될 보인다 . 어쩌면 더 많은 경험을 가진 사람이 잡을 수 있습니다. 이 문제를 해결하는 방법에 대한 조언

    도움 주셔서 감사합니다.

  • 답변

    1

    HasQuarterState에서 분배를 선언했지만 정의하지 않았습니다. 이 함수에는 시체가 없습니다. 마찬가지로 SoldState의 turnCrank도 마찬가지입니다.

    +0

    나는 이것이 괜찮다고 생각 했습니까? 마치 아무것도하지 않아야합니다. VS를 정의하지 않으면 VS에서 오류가 발생하기 때문에 포함 시켰습니다. – Chris

    +1

    SoldState가 State에서 파생되었으므로 선언해야합니다. State에서 파생 된 것은 순수 가상 메소드 (virtual void foo() = 0)를 모두 구현해야합니다. SoldState는 실행할 구현이 있어야합니다. State와 동일한 메소드 선언만으로는 충분하지 않습니다. 당신도 그들을 구현해야합니다. –

    +0

    분배 작업에 아무 것도하지 않으려면 ";" "{}"와 함께 - 선언과 정의 모두입니다. –

    0

    SoldState 클래스에서 turnCrank는 정의되지 않았습니다. 변경 :
    void turnCrank() const;
    다음으로 :
    void turnCrank() const {cout < < "일부 구현"< < endl; }

    및 다른 기능에 대해서도 마찬가지입니다.

    관련 문제