Wie kann ich Variablen neu initialisiert werden Funktion jedes Mal, nenne ich eine C ++?

StackOverflow https://stackoverflow.com/questions/495540

  •  20-08-2019
  •  | 
  •  

Frage

Wie erhalte ich hinter diesem Variableninitialisierung Problem? Wenn ich könnte nur herausfinden, wie sie nur initialisieren nur einmal ...

*   Main.cpp : main project file.


/**************************   Begin Header **************************/
#include "stdafx.h" //Required by Visual C ++
#include <string>   //Required to use strings
#include <iostream> //Required for a bunch of important things
#include <iomanip>  //Required for manipulation of text and numbers


using namespace System; // Automatically uses System namespace
using namespace std;    // Automatically uses std namespace


#pragma hdrstop // Stops header here
/***************************  End Header ***************************/

//* Begin Function Headers *//
void inputData(); // This will be used to organize class member calls when setting and getting new data.
int getData(); // Will get user data, input in character string, convert to an integer and then perform data validation.
void createReport(int place, int number, string type); // Will organize commands to create the report and display it on the screen.
//* End Function Headers *//



class JarsSold // Begin Class -- JarsSold
{
    /* Begin Initialization & Creation of important resources */
private:
    static const int MaxArray = 5; // Value for the size of array JARS_SOLD
    int JARS_SOLD[MaxArray]; // Creation of array with size of MaxArray
    /* End Initialization & Creation of important resources */
public: // Makes underlining elements Public instead of the default Private
    JarsSold() // Begin Constructor
    { // Put something in num array
      JARS_SOLD[0] = 0; // [1]
      JARS_SOLD[1] = 0; // [2]
      JARS_SOLD[2] = 0; // [3]
      JARS_SOLD[3] = 0; // [4]
      JARS_SOLD[4] = 0; // [5] 
    } // End Constructor
    ~JarsSold(){}; // Destructor

/* Put all members for JarsSold class below here */

    void setNumber(int num, int value) // Set the number of jars sold with number placement in array and value to replace it with
    {
        JARS_SOLD[num] = value; // Stores value into JARS_SOLD at whatever num is at the time
    }; // End setNumber class member

    int getNumber(int num) // Get the current number held for jars sold with number placement in array
    {
        return JARS_SOLD[num]; // Returns whatever is in JARS_SOLD depending on what num is at the time
    } // End getNumber class member


/* Put all members for JarsSold class above here */

}; // End Class -- JarsSold




class SalsaTypes // Begin Class -- SalsaTypes
{
    /* Begin Initialization & Creation of important resources */
private:
    static const int MaxArray = 5; // Value for the size of array JARS_SOLD
    string SALSA_TYPES[MaxArray]; // Creation of array with size of MaxArray
    /* End Initialization & Creation of important resources */

public: // Makes underlining elements public instead of the default Private
    SalsaTypes() // Begin Constructor
    { // Add default strings to str array
      SALSA_TYPES[0] = "Mild";   // [1] Stores Mild into SALSA_TYPES at 0 spot
      SALSA_TYPES[1] = "Medium"; // [2] Stores Medium into SALSA_TYPES at 1 spot
      SALSA_TYPES[2] = "Sweet";  // [3] Stores Sweet into SALSA_TYPES at 2 spot
      SALSA_TYPES[3] = "Hot";    // [4] Stores Hot into SALSA_TYPES at 3 spot
      SALSA_TYPES[4] = "Zesty";  // [5] Stores Zesty into SALSA_TYPES at 4 spot
    } // End Constructor
    ~SalsaTypes(){}; // Destructor

/* Put all members for SalsaTypes class below here */
    void setType(int num, string type) // Set salsa type with number placement in array and string value to replace with
    {
        SALSA_TYPES[num] = type; // Stores the string type into SALSA_TYPES at whatever num is at the time
    }; // End setType class member

    string getType(int num) // Get the Salsa Type with number placement in array
    {
        return SALSA_TYPES[num]; // Returns SALSA_TYPES depending on what is in num at the time
    }; // End getType class member
/* Put all members for SalsaTypes class above here */

};// End Class -- SalsaTypes


void main( void ) // Begin Main Program
{



cout << fixed << setprecision(1) << setw(2); // Do a little customization with IoManip, might as well, we just might need it

    // Main Program Contents Begin Here //

    // Opening Credits for Program
    cout << "Welcome to the /Professional Edition\\ of the Chip and Salsa Sale Tool EXPRESS." << endl;
    cout << "This handy-dandy tool will make a chip and salsa manufacturer's job much easier!" << endl;
    cout << endl << endl << endl;
    cout << "Press any key to begin inputing the number of jars sold for these salsa flavors: " << endl << endl;
    cout << "-Mild" << endl << "-Medium" << endl<< "-Sweet" << endl << "-Hot" << endl << "-Zesty" << endl << endl << endl;

    system("pause"); // Pause here. After this begin data input
    cout << endl << endl << endl;

    inputData(); // Will deal with data input, validation, and reports

    // Main Program Contents End Here //

} //End Main Program

// All Content for Functions Begin Here //
void inputData() // Begin inputData Function
{
    // Begin Create Class Obects //
    SalsaTypes salsa;
    JarsSold jars;
    // End Create Class Objects //
    // Variable Creation Begin //
    // Variable Creation End //
    // All Content for Functions Begin Here //

    for (int i = 0 ; i < 5 ; i++) // Start For Loop
    {
        cout << "Input how many Jars were sold for \"" << salsa.getType(i) << "\"" << ": "; // Displays which Salsa we are reffering to

        jars.setNumber(i,getData()); // Will use getData() to determine what value to send to the JarsSold class.
        createReport(i,jars.getNumber(i),salsa.getType(i)); // Send these numbers to another function so it can make a report later

        cout << endl << endl; // Using this as a spacer
    }

    // All Content for Functions End Here //

}; // End inputData Function

int getData() // Begin getData Function
{
    // Variable Creation Begin //
    char charData[40]; // Will be used to store user data entry
    int numTest; // Will be used for Data Validation methods
    // Variable Creation End //

    // Main Contents of Function Begin Here //
retry: // Locator for goto command

    cin >> charData; // Ask user for input. Will store in character string then convert to an integer for data validation using 'Atoi'

    numTest = atoi ( charData ); // Convert charData to integer and store in numTest

    if (numTest < 0) { numTest = 0; cout << endl << endl << "You can't enter negative numbers! Try Again." << endl << endl << "Re-enter number: "; goto retry;} // Filter out negative numbers

    // Main Contents of Function End Here //

    return numTest; // If it makes it this far, it passed all the tests. Send this value back.
}; // End getData Function

void createReport(int place, int number, string type) // Begin createReport Function
{
    // Variable Creation Begin //

    int const MAX = 5;  // Creat array size variable
    int lowest; // The integer it will use to store the place of the lowest jar sales in the array
    int highest; // The integer it will use to store the place of the highest jar sales in the array
    int total; // The integer it will use to store total sales
    int numArray[MAX];  // Create array to store jar sales (integers)
    string typeArray[MAX];  // Create array to store types of salsa (strings)

    // Variable Creation End //
    // Main Contents of Function Begin Here //

    numArray[place] = number; // Store number into new array
    typeArray[place] = type;    // Store type into new array

    if (place = 4) // If the array is full it means we are done getting data and it is time to make the report.
    { // Begin making report, If statement start

        for ( int i = 0 ; i < 5 ; i++ ) // Using a for-loop to find the highest and lowest value in the array
        { // For Loop to find high and low values BEGIN
            if ( lowest < numArray[i]) // Keep setting lowest to the lowest value until it finds the lowest one
            { // Start If
            lowest = numArray[i]; // Lowest equals whatever is in numArray at i spot
            } // End If

            if ( highest > numArray[i]) // Keep setting highest to the highest value until it finds the highest one
            { // Start If
            highest = numArray[i]; // Highest equals whatever is in numArray at i spot
            } // End If
            total += numArray[i]; // Will continually add numArray at i spot until it has the total sales
        } // For Loop to find high and low values END

    // Main Contents of Function End Here //

} // END creatReport Function
// All Content for Functions Ends Here //

Nun mein Problem ist ... Ich muss von einer Funktion zur anderen meine Daten vermitteln. Ich dachte, ich könnte herausfinden, wie Global Class-Objekte zu erstellen, aber ich konnte nicht. Also dachte ich, ich nur die Argumente zu übergeben, um eine andere Funktion zu umgehen konnte und die Wiederherstellung sie dann in ihren eigenen Reihen und dann weiterhin tun, bis ich vollständig alle Zahlen-Arrays und String-Arrays kopiert haben. Nun ... ja, das funktioniert, außer diesem Teil in Create ():

// Variable Creation Begin //

    int const MAX = 5;  // Create array size variable
    int lowest; // The integer it will use to store the place of the lowest jar sales in the array
    int highest; // The integer it will use to store the place of the highest jar sales in the array
    int total; // The integer it will use to store total sales
    int numArray[MAX];  // Create array to store jar sales (integers)
    string typeArray[MAX];  // Create array to store types of salsa (strings)

// Variable Creation End //

Was passiert ist, ich denke, ich bin so müde, dass ich es verpasst, rufen Sie jedes Mal, wenn ich diese Funktion wieder die gleichen Variablen neu initialisiert. Ich werde Variablen in einer anderen Variable gesetzt und dann wird es wieder initialisiert Standardwerte erhalten.

Ich habe versucht, eine Gegenvariable, die einen gezählt, nachdem sie initialisiert und dann, nachdem sie 1 war es würde wieder initialisieren. Nein, die nicht funktioniert, weil die Variablen außerhalb des Bereichs der if-Anweisung initialisiert werent. Ich habe dann versucht, eine GOTO-Anweisung, die die Initialisierung überspringen würde, nachdem es einmal passiert ist. Nope etwas schief gelaufen ist mit der ersten Initialisierungsphase und ohne Kompilierung.

ich brauche, um herauszufinden, wie ich kann entweder

  1. halten diese Variablen von immer neu zugeordnet oder initialisiert, damit sie ihre Werte beibehalten können. Oder
  2. herauszufinden, wie die globalen Klassenobjekte erstellen (und ja ich die externen Klassen mit mehreren Quelldateien versucht habe. Kein Glück nur viele Fehler)

Ich bin nicht sehr gut in der Programmierung noch. Aber ich versichere Sie, ich habe seit Stunden und Stunden und Stunden auf diesem Stück Arbeit und ich war die ganze Nacht nur ständig Versuch und Irrtum. Ich mich sehr stolz, weil dieser Code ist ziemlich fortgeschritten für mich. Ich habe bei jedem Tutorial auf Google gesucht und ich bin frisch aus Glück - sie sind meine letzte Hoffnung ist !! Leider wieder Jungs. Ich weiß, das ist eine dumme Frage ...

Eine letzte kurze Frage. Wie erstellen Sie Global Class Objects? Zum Beispiel

MyClass
{
  MyClass(){};
  ~MyClass(){};
}

MyClass MyClassObject;

Wie verwende ich MyClassObject mein ganzes Programm?

Die einzige Art, wie ich es verwenden kann, ist, wenn ich ein neues Objekt jedes Mal mit jeder Funktion, die ich verwende erstellen. Und das bedeutet, dass ich alle Daten in meiner Klasse gespeichert verlieren?

Ich habe gelesen, dass die globale Objekt aufweist, ist allerdings keine gute Idee. Ich würde lieben, sie nicht zu verwenden zu haben, aber ich habe keine Ahnung, auf alle Alternativen, die ich wirklich verstehen kann.

Jede andere Kritik oder Hinweise wird sehr geschätzt. Ich dieses Zeug lieben ich haben einfach nicht viele Menschen Fragen zu stellen.

War es hilfreich?

Lösung

Du machst das wirklich gut! Die einfache Antwort ist vor Ihren Variablen statisch zu schreiben:

static int const MAX = 5;  // Creat array size variable
static int lowest; // The integer it will use to store the place of the lowest jar sales in the array
static int highest; // The integer it will use to store the place of the highest jar sales in the array
static int total; // The integer it will use to store total sales
static int numArray[MAX];  // Create array to store jar sales (integers)
static string typeArray[MAX];      // Create array to store types of salsa (strings

Ich glaube, ich kann Ihnen eine bessere Beratung obwohl geben, ich auf den Code für ein bisschen länger aussehen. Wie für globale Variablen, würde was du da geschrieben mit MyClassObject funktionieren. Sie würden es wie folgt verwenden:

MyClass { 
public:
  MyClass(){}; 
  ~MyClass(){}; 
  int variable;
};
MyClass MyClassObject;

// in a method you'd do this
void whateverMethod() {
  MyClassObject.variable = 5;
  std::cout << MyClassObject.variable << std::endl;
}

Diese Art der Sache. Es gibt einige Stilfragen, die aber behoben werden können, ehrlich zu sein sage ich es gerade erst erhalten zu arbeiten und dann können wir über diejenigen sprechen.

Andere Tipps

1) Stellen sie statisch zB

static string typeArray[MAX];

Initialisiere sie einmal, sie werden gleich bleiben, bis Sie sie ändern. Versuchen Sie nicht, und sie zugleich von zwei Threads verwendet werden.

2) Sie können ein globales Objekt erstellen, indem es in Dateigültigkeitsbereich deklarieren:

class CFoo;

CFoo s_foo;

class CFoo 
{
    public:
    CFoo();
    ~CFoo();
}

Dann s_foo wird eine Instanz von CFoo überall verfügbar sein, die s_foo (diese Datei und andere, die extern CFoo s_foo haben;) sehen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top