c++ - 对类的静态成员的未定义引用
问题描述
我即将学习 C++ 中的基本 OOP 操作,现在我遇到了静态类成员的问题。我尝试构建简单的纸牌游戏。我创建Rules
类Deck
和Card
.
我的Deck
班级从Rules
课堂上学习规则和一些常量,然后做一些事情。我只Deck::createDeck();
在主函数中使用,没有别的。当我尝试编译代码时,出现结果错误:
/usr/bin/ld: CMakeFiles/CardGame.dir/Sources/Rules.cpp.o: 在函数
Rules::getSuits[abi:cxx11]()': /home/bartosz/CLionProjects/CardGame/Sources/Rules.cpp:12: undefined reference to
Rules::suits[abi:cxx11]' /usr/bin/ld: CMakeFiles/CardGame.dir/Sources/Rules. cpp.o: 在函数Rules::getRanks[abi:cxx11]()': /home/bartosz/CLionProjects/CardGame/Sources/Rules.cpp:16: undefined reference to
Rules::ranks[abi:cxx11]' collect2: error: ld returned 1 exit status
但我相信静态成员 (suits
和ranks
) 是正确初始化的,那么为什么编译器看不到这个变量呢?
我的代码:
规则.h
#ifndef CARDGAME_RULES_H
#define CARDGAME_RULES_H
#include <string>
class Rules {
public:
static std::string suits[4];
static std::string ranks[13];
public:
static std::string * getSuits();
static std::string * getRanks();
};
#endif //CARDGAME_RULES_H
规则.cpp
#include "../Headers/Rules.h"
std::string suits[4] = {"Diamonds", "Hearts", "Spades", "Clubs"};
std::string ranks[13] = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
std::string * Rules::getSuits() {
return suits;
}
std::string * Rules::getRanks() {
return ranks;
}
甲板.h
#ifndef CARDGAME_DECK_H
#define CARDGAME_DECK_H
#include "Card.h"
class Deck {
private:
Card * cards;
Deck();
public:
static void createDeck();
void shuffle();
void dealCards();
};
#endif //CARDGAME_DECK_H
甲板.cpp
#include "../Headers/Deck.h"
#include "../Headers/Rules.h"
Deck::Deck() {
}
void Deck::createDeck() {
std::string * ranks = Rules::getRanks();
std::string * suits = Rules::getSuits();
// some operations
}
void Deck::shuffle() {
}
void Deck::dealCards() {
}
解决方案
在Rules.cpp
中,您没有定义静态成员Rules::suits
and Rules::ranks
,而是引入了 2 个新的全局变量。
为了使静态定义起作用,您需要指定完全限定名称,例如Rules::suits
.
推荐阅读
- python - 如何在 Selenium 中定位标签按钮(Angular 组件)?
- c# - 错误:GetResultCore(布尔值 waitCompletionNotification)
- python - 为给定的数据点创建简单的 networkx 图形布局
- php - 输入类型文件多个jQuery laravel
- javascript - 如何使用 JavaScript 中的输入值进行计算?
- mysql - 字符串以数字开头,查询后返回不同的结果
- python - 使用 Dropbox URL 获取 Dropbox 文件内容
- javascript - 如何使用数组数组查找数组
- python - 错误:在 tensorflow 2 中训练 inception v3
- android - 如何在谷歌地图中获取标记位置