1

重複の可能性:
未定義の参照/未解決の外部シンボル エラーとは何ですか? また、どのように修正すればよいですか?

私は解決できないリンカの問題を抱えています..すでに私が考えることができるものはすべて試しました。ベースクラス(人)と派生クラス(ディーラー)があり、CardStack クラスからコンストラクタを呼び出したいだけです。 Dealer クラスのメンバーです。

これが私のコードです:

Person.h

#ifndef PERSON_H
#define PERSON_H
#include "Card.h"
#include "Hand.h"

class Person
{
public:
    Person(void);
    virtual ~Person(void);
    virtual bool TakeCard(Card c);
    virtual bool Lost(void);

protected:
    virtual void CheckLost(void);
    bool b_Lost;
    Hand m_Hand;
};
#endif

ディーラー.h

    #ifndef DEALER_H
#define DEALER_H

#include "Person.h"
#include "Card.h"
#include "CardStack.h"

class Dealer : public Person
{
public:
    Dealer(int stackcount);
    virtual ~Dealer(void);
    bool TakeCard(Card c);
    bool Lost(void);
    Card GiveCard(Card c);

protected:
    void CheckLost(void);
    CardStack m_GameStack;
};
#endif

ディーラー.cpp

#include "Dealer.h"

Dealer::Dealer(int stackcount) : Person(), m_GameStack(stackcount)
{

};

Dealer::~Dealer(void)
{

};

bool Dealer::TakeCard(Card c)
{
    if(!b_Lost || m_Hand.GetTotal() <= 17)
    {
        m_Hand.Take(c);
        CheckLost();
        return true;
    }

    return false;
};

void Dealer::CheckLost()
{
    if (m_Hand.GetTotal() > 21)
    {
        b_Lost = true;
    }
};

bool Dealer::Lost()
{
    return b_Lost;
};

思いつく限りのことを正直にやってみましたが、何が間違いなのかわかりませんでした...

Dealer.cpp をコンパイルしたときの出力は次のとおりです。

1>Dealer.obj : エラー LNK2019: 未解決の外部シンボル "public: virtual __thiscall Person::~Person(void)" (??1Person@@UAE@XZ) 関数 __unwindfunclet$ で参照されています??0Dealer@@QAE@H@ $0

1>Dealer.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall Person::TakeCard(class Card)" (?TakeCard@Person@@UAE_NVCard@@@Z)

1>Dealer.obj: エラー LNK2001: 未解決の外部シンボル "public: virtual bool __thiscall Person::Lost(void)" (?Lost@Person@@UAE_NXZ)

1>Dealer.obj: エラー LNK2001: 未解決の外部シンボル "保護: 仮想 void __thiscall Person::CheckLost(void)" (?CheckLost@Person@@MAEXXZ)

4

1 に答える 1

-2

Dealer.cpp を単独でプログラムにコンパイルしようとしているようです。おそらく Person.cpp にある Person のメソッドの定義に依存しているため、これは機能しません。コンパイルに使用したコマンドを示していただけると助かります。しかし、g++ を使用していると仮定すると、おそらくやろうとしたことは

g++ Dealer.cpp

あなたがすべきだったのはどちらかです

g++ Person.cpp Dealer.cpp etc.

また

g++ -c Dealer.cpp
g++ -c Person.cpp

など、その後

g++ Dealer.o Person.o etc.
于 2012-10-29T16:09:44.433 に答える