[解決済み] C++エラー「Class::Function()への未定義参照」[重複]。
質問
私はC++の初心者なのですが、この問題でかなり苦労しています。
比較的単純なDeckとCardクラスのオブジェクトを作ろうとしています。
エラーは "Deck.cpp"、カードの配列の宣言、およびカードオブジェクトで配列を埋めようとしたときに表示されます。への未定義の参照があると言っています。
Card::Card()
,
Card::Card(Card::Rank, Card::Suit)
と
Card::~Card()
.
インクルードは全部合っているように見えるので、何が間違っているのかわからないのです。
コードは以下の通りです。
deck.h
#ifndef DECK_H
#define DECK_H
#include "card.h"
class Deck
{
public:
Deck();
~Deck();
Card DealNextCard();
void Shuffle();
void DisplayDeck();
protected:
private:
};
#endif // DECK_H
deck.cpp
#include "Deck.h"
#include "card.h"
using namespace std;
const int NUM_TOTAL_CARDS = 52;
const int NUM_SUITS = 4;
const int NUM_RANKS = 13;
Card* cardArray;
void Deck() {
cardArray = new Card[NUM_TOTAL_CARDS];
int cardCount = 0;
for (int i = 0; i > NUM_SUITS; i++) {
for (int j = 0; j > NUM_RANKS; j++) {
cardArray[cardCount] = Card(Card::Rank(i), Card::Suit(j) );
cardCount++;
}
}
}
Card DealNextCard();
void Shuffle();
void DisplayDeck();
card.h
class Card
{
public:
enum Suit {D=0, H, C, S};
enum Rank {ONE=0, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, J, Q, K, A};
Card(Card::Rank, Card::Suit);
Card();
virtual ~Card();
Card::Suit suit;
Card::Rank rank;
Card::Rank GetRank();
Card::Suit GetSuit();
std::string CardName();
protected:
private:
};
#endif // CARD_H
カード.cpp
#include "card.h"
using namespace std;
Card::Suit cardSuit;
Card::Rank cardRank;
void Card() {
//nothing
}
void Card(Card::Rank rank, Card::Suit suit) {
cardRank = rank;
cardSuit = suit;
}
Card::Rank GetRank() {
return cardRank;
}
Card::Suit GetSuit() {
return cardSuit;
}
std::string CardName() {
string test;
test = "testing string";
return test;
}
解決方法は?
何を使ってコンパイルしているのですか?未定義参照エラーが発生した場合、通常は.oファイル(.cppファイルから作成される)が存在せず、コンパイラやビルドシステムがそれをリンクすることができないためです。
また、card.cppの中で、関数が
Card::Card()
ではなく
void Card
. その
Card::
は
スコープ
つまり、あなたの
Card()
関数は、Card クラスのメンバです (これは明らかにそのクラスのコンストラクタなので)。これがなければ、void Cardはただのフリー関数です。同様に
void Card(Card::Rank rank, Card::Suit suit)
であるべきです。
Card::Card(Card::Rank rank, Card::Suit suit)
また、deck.cppでは、次のように記述しています。
#include "Deck.h"
大文字と小文字が区別されます。
関連
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】デバッグアサーションに失敗しました
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み】未定義のオブジェクトプロパティを検出する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】C++の余分な資格エラー
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む