繁体   English   中英

未定义对 class 成员的 static 成员的引用

[英]Undefined reference to static member of class

我即将在 C++ 中学习基本的 OOP 操作,现在我遇到了 static ZA2F2ED4F8EBC2CBBD4C21 成员的问题。 我尝试构建简单的纸牌游戏。 我创建类RulesDeckCard

我的Deck class 从Rules class 中获取规则和一些常量,然后做一些事情。 我只使用Deck::createDeck(); 在主要的 function 中,仅此而已。 当我尝试编译代码时,出现结果错误:

/usr/bin/ld: CMakeFiles/CardGame.dir/Sources/Rules.cpp.o: 在 function 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: 在 function Rules::getRanks[abi:cxx11]()': /home/bartosz/CLionProjects/CardGame/Sources/Rules.cpp:16: undefined reference to Rules::ranks[abi:cxx11] 的引用' collect2:错误:ld 返回 1 退出状态

但我相信 static 成员( suitsranks )已正确初始化,那么为什么编译器看不到这个变量呢?

我的代码:

规则.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中,您没有定义static 成员Rules::suitsRules::ranks ,而是引入了 2 个新的全局变量。

为了使 static 定义起作用,您需要指定完全限定名称,例如Rules::suits

使用常量表达式constexpr

在 header Rules.h 文件中:

constexpr std::array<std::string_view, 4> suits = {"Diamonds", "Hearts", "Spades", "Clubs"}; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM