Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在函数外使用向量值_C++_Scope_Blackjack - Fatal编程技术网

C++ 在函数外使用向量值

C++ 在函数外使用向量值,c++,scope,blackjack,C++,Scope,Blackjack,背景 我们正在创建一个21点游戏,我们想把牌发给玩家。我们制作了一个函数,可以创建一个数字向量,我们还可以“洗牌”这些数字。我们现在要做的是获取向量洗牌卡德瓦尔并将值分发给庄家和玩家 我们的问题是我们不能让洗牌的卡片在函数之外工作。通过阅读其他文章,我们可以相当肯定我们的问题是,因为shuffled_cardvals是在函数shuffle()中使用的,所以它不存在于该函数之外 因此,我们知道这个问题,但我们不知道如何解决它 代码 这是我们的密码。我们使用一个源文件和一个头文件,因为我们认为这会使

背景

我们正在创建一个21点游戏,我们想把牌发给玩家。我们制作了一个函数,可以创建一个数字向量,我们还可以“洗牌”这些数字。我们现在要做的是获取向量洗牌卡德瓦尔并将值分发给庄家和玩家

我们的问题是我们不能让洗牌的卡片在函数之外工作。通过阅读其他文章,我们可以相当肯定我们的问题是,因为shuffled_cardvals是在函数shuffle()中使用的,所以它不存在于该函数之外

因此,我们知道这个问题,但我们不知道如何解决它

代码

这是我们的密码。我们使用一个源文件和一个头文件,因为我们认为这会使事情变得更干净

main.cpp

#包括
#包括
#包括
#包括
#包括
#包括
#包括“blackjack_header_functions.hpp”
#包括“BlackjackClass.hpp”
int main(){
//外部-内部选择;
//介绍

好吧,有几件事我有点担心

  • std::vector cardvals
    std::vector cards
    在标题中进行了初始化,这可能是您不想要的。我建议将其声明为
    extern
    ,并在
    .cpp
    中对其进行初始化。这是因为每个翻译单元都会获得自己的数组实例,从而导致h伊达奇:)

  • 可以全局声明这两个数组,但通常不建议这样做。我会创建函数来创建这样的数组,但这样做很好

  • 你想用
    std::vector&x;
    实现什么?我相信
    std::vector x;
    会解决你的问题:)


  • 因为你要用C++代替C,你还应该把事情写得更面向对象,而不是把全局的东西声明给几个人认为是坏习惯。

    < P> >我有一些事情我很担心。

  • std::vector cardvals
    std::vector cards
    在标题中进行了初始化,这可能是您不想要的。我建议将其声明为
    extern
    ,并在
    .cpp
    中对其进行初始化。这是因为每个翻译单元都会获得自己的数组实例,从而导致h伊达奇:)

  • 可以全局声明这两个数组,但通常不建议这样做。我会创建函数来创建这样的数组,但这样做很好

  • 你想用
    std::vector&x;
    实现什么?我相信
    std::vector x;
    会解决你的问题:)


  • 因为你要用C++代替C,你也应该把东西写的更面向对象,而不是在全局上声明一些人认为是坏习惯的东西。

    代码>和SuffDeLeLeCalvs= {} <代码>不是你所发布的代码,请发布一个声明:还有一个全局引用。你可能需要将它们作为引用传递到shuffle中,就像Deal中的x一样。此外,hpp文件中有一个全局引用x未分配,编译器将为此给出一个错误。正如使用C++时的一般建议:为什么不制作一个包含所有相关卡信息和方法和一个
    牌组
    类,该类持有多张牌,并具有
    shuffle()等方法
    等@AlanBirtles在清理代码和清除内容之前,我无意中包含了一条旧错误消息。刚刚修复了它!@Ian4264因此,本质上,我应该只将shuffled\u cardvals创建为一个全局变量,然后将其传递到shuffle()?
    &shuffled\u cardvals={}
    不在您发布的代码中,请发布您在shuffle()中将shuffled\u Cardwals声明为本地的还有一个全局引用。你可能需要将它们作为引用传递到shuffle中,就像Deal中的x一样。此外,hpp文件中有一个全局引用x未分配,编译器将为此给出一个错误。正如使用C++时的一般建议:为什么不制作一个包含所有相关卡信息和方法和一个
    牌组
    类,该类持有多张牌,并具有
    shuffle()等方法
    etc.@AlanBirtles在清理代码和清除内容之前,我无意中包含了一条旧的错误消息。刚刚修复了它!@Ian4264所以本质上,我应该只将shuffled_cardvals创建为全局变量,然后将其传递到shuffle()中?通过你的指导,我们最终实现了它,我们最终获得了游戏运行的基本版本,尽管没有课程。我们现在将练习课程并尝试使用这些课程来实现游戏。谢谢!通过你的指导,我们最终实现了它,我们最终获得了游戏运行的基本版本,尽管没有课程。We现在将练习课程,并尝试用这些课程来实现游戏。谢谢!
     #include <iostream>
     #include <cmath>
     #include <string>
     #include <vector>
     #include <algorithm>
     #include <sstream>
     #include "blackjack_header_functions.hpp"
     #include "BlackjackClass.hpp"
    
    int main() {
    
    //extern int choice;
    // Intro
    std::cout << "Good Evening. This is Samuel L. Jackson. Welcome to BlackJack(son). \n";
    
    // output initial face value of cards
    std::cout << "Initial face values for each player: ";
    
    int facevalue = 0;
    std::cout << "\n";
    
    //shuffle the cards and output the results
    shuffle();
    
    
    // take the player to "the hub"
    selectionMenu();
    
    //std::cout << "your choice is " << choice << " biatch\n";
    
     return 0;
    }
    
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <string>
    #include <ctime>
    #include <cstdlib>
    
    void selectionMenu();
    void DetermineWinner();
    void shuffle();
    
    std::vector <std::string> cards = { "AC" , "AH" , "AS" , "AD" ,"KC" , "KH" , "KS" , "KD" , 
    "QC" , "QH" , "QS" , "QD", "JC" , "JH" , "JS" , "JD" , "10C" , "10H" , "10S" , "10D" ,
    "9C" , "9H" , "9S" , "9D" ,"8C" , "8H" , "8S" , "8D" , "7C" , "7H" , "7S" , "7D" , 
    "6C" , "6H" , "6S" , "6D" , "5C" , "5H" , "5S" , "5D" , "4C" , "4H" , "4S" , "4D" , 
    "3C" ,"3H" , "3S" , "3D" , "2C" , "2H" , "2S" , "2D" };
    
    
    std::vector <int> cardvals = {
     2, 2, 2, 2,
     3, 3, 3, 3, 
     4, 4, 4, 4,
     5, 5, 5, 5,  
     6, 6, 6, 6,
     7, 7, 7, 7, 
     8, 8, 8, 8,
     9, 9, 9, 9, 
     10, 10, 10, 10,
     10, 10, 10, 10,
     10, 10, 10, 10,
     10, 10, 10, 10,};
    
    
    
    std::vector <int> shuffled_cardvals = {};
    
    
    std::vector <int> &x;
    
    void shuffle(){
    
    // First, generate a random seed for the card shuffling process.
    // If we don't do this step, every time we call random_shuffle(),
    // we'll get the same order of cards for our shuffled deck, making
    // it not very random.
    
    std::srand(std::time(0));
    
    // Next, shuffle the cards and their face values
    std::random_shuffle(cards.begin(), cards.end());
    std::random_shuffle(cardvals.begin(), cardvals.end());
    
    // then, put the shuffled cards in a new vector called shuffled_deck
    for(int i =  0; i < cards.size(); i++) {shuffled_deck.push_back(cards[i]);}
    
    // do it for the face values too
    std::vector <int> shuffled_cardvals = {};
    for(int i =  0; i < cardvals.size(); i++) {shuffled_cardvals.push_back(cardvals[i]);}
    
    // finally, output the shuffled deck to the console
    std::cout << "Shuffled deck: \n";
    for(int i =  0; i < shuffled_deck.size(); i++)  {std::cout << shuffled_deck[i] << " ";}
    
    std::cout << "\n" << "Shuffled card values: \n";
    for(int i =  0; i < shuffled_cardvals.size(); i++)  {std::cout << shuffled_cardvals[i] << " ";}
    
     }
    
       void Deal(std::vector <int> &x) {
    
        int dealerhand = 0;
        int playerhand = 0;
    
        for(int i = 0; i < 4; i++) {
    
        dealerhand = dealerhand + x[i];
        playerhand = playerhand + x[i+1];
    
        }
    
        std::cout << "\n" << dealerhand << "\n" << playerhand;
    
        }
    
          In file included from main.cpp:100:
     blackjack_header_functions.hpp:38:20: error: 'x' declared as reference but 
     not initialized
        38 | std::vector <int> &x;
           |                    ^
     blackjack_header_functions.hpp: In function 'void shuffle()':
     blackjack_header_functions.hpp:54:45: error: 'shuffled_deck' was not 
     declared in this scope
        54 |     for(int i =  0; i < cards.size(); i++) 
                  {shuffled_deck.push_back(cards[i]);}
           |        ^~~~~~~~~~~~~
     blackjack_header_functions.hpp:62:25: error: 'shuffled_deck' was not 
     declared in this scope
        62 |     for(int i =  0; i < shuffled_deck.size(); i++)  {std::cout << 
             shuffled_deck[i] << " ";} ^~~~~~~~~~~~~
           |