Also bevor ich diese Frage gestellt habe, habe ich versucht, eine Antwort zu finden, aber alles, was ich fand, war Leute mit Fehlern in ihrem Code und/oder der Code war nicht wirklich identisch.Genau derselbe C++ Code gibt verschiedene Ausgaben
Mein Problem ist genau das - identischer Code, nur Unterschiede sind verschiedene Dateinamen. (Zwei Ordner, zwei Projekte, verschiedene Dateinamen, identischer Code außer der #Include-Zeile)
http://imgur.com/a/5HmzN Vergleich von Code und Ausgabe. Code auf der linken Seite funktioniert und die Vektorgröße ist 2 nach dem Beenden.
Dies ist der Code: (Projekt A Dateiname/Projekt B Dateiname)
main.cpp/main.cpp
#include <iostream>
#include <vector>
#include "class.h" //this would be "Card.h" in project B
using namespace std;
int main()
{
cout<<"Start of main"<<endl;
cout<<K.size()<<endl;
K.push_back("random STR");
cout<<K.size()<<endl;
cout<<"End of main"<<endl;
return 0;
}
class.cpp/Card.cpp
#include "class.h" //this would be "Card.h" in project B
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<string> K;
Card::Card(string card_name ,
string card_type ,
bool card_active ,
bool card_discardable ,
bool card_heals ,
bool card_deals_damage ,
bool card_draws ,
bool card_blocks ,
bool card_discards ,
void (*card_pointer)() )
{
Name = card_name ;
Type = card_type ;
Active = card_active ;
Discardable = card_discardable ;
Heals = card_heals ;
Deals_damage = card_deals_damage ;
Draws = card_draws ;
Blocks = card_blocks ;
Discards = card_discards ;
Execution = card_pointer ;
cout<<"Start of Class"<<endl;
cout<<K.size()<<endl;
K.push_back(Name);
cout<<K[0]<<endl;
cout<<K.size()<<endl;
cout<<"End of Class"<<endl;
}
string Card::getName()
{
return Name;
}
void Card::execute()
{
Execution();
}
class.h/Card.h
#ifndef CARD_H
#define CARD_H
#include <string>
#include <vector>
extern std::vector<std::string> K;
class Card
{
public:
Card( std::string card_name ,
std::string card_type ,
bool card_active ,
bool card_discardable ,
bool card_heals ,
bool card_deals_damage,
bool card_draws ,
bool card_blocks ,
bool card_discards ,
void (*card_pointer)() );
std::string getName();
void execute();
private:
std::string Name ;
std::string Type ;
bool Active ;
bool Discardable ;
bool Heals ;
bool Deals_damage;
bool Draws ;
bool Blocks ;
bool Discards ;
void (*Execution)();
};
#endif
aFile CPP/test.cpp
#include <iostream>
#include "class.h"
void execute_stab()
{
std::cout<<"You dealt 2 dmg to enemy player"<<std::endl;
}
Card Stab("Stab", "Offensive", false, true, false, true, false, false, false, execute_stab);
Ausgabe ist im Album, für diejenigen, die hier nicht verwenden können Imgur es ist:
Projekt A:
Start of Class
0
1
Stab
End of Class
Start of main
1
2
End of main
Projekt B:
Ich entschuldige mich, wenn mein Code ist chaotisch oder ich mache Dinge auf eine dumme Weise, ich habe gerade angefangen zu lernen C++ und das war mein Versuch zu erstellen Kartenspiel. Die große Frage ist also, warum identischer Code unterschiedliche Ausgaben liefert? Vielen Dank
Versuchen Sie, es auf einen [MCVE] zu reduzieren. Der Prozess, wenn er beschnitten wird, kann Ihnen helfen, den Fehler zu finden, und es wird uns sicherlich leichter machen, ihn zu reproduzieren. Im Moment gibt es einfach zu viel Fremdcode für eine gute Frage. – BoBTFish
Sie könnten auch versuchen, die beiden Versionen vorzuverarbeiten, die nur # include's und Makros verarbeiten und dann das Ergebnis vergleichen, um zu sehen, wo der Unterschied tatsächlich liegt. Mit g ++ oder clang ++ machen Sie das mit der Option '-E'. – BoBTFish
@BoBTFish es gibt keinen Fehler, der Code funktioniert perfekt auf meinem Projekt A. Frage ist, warum die identische Kopie nicht funktioniert. –