この質問をする前に、私は答えを見つけようとしましたが、私が見つけたのは、コードに間違いを犯した人や、コードが実際には同じではなかったということでした。全く同じC++コードは別の出力を与えます
私の問題はまったく同じコードなので、違うのはファイル名の違いだけです。 (2つのフォルダ、2つのプロジェクト、異なるファイル名、#include行以外の同一コード)
http://imgur.com/a/5HmzN コードと出力の比較。左のコードは動作しており、仕上げ後のベクトルサイズは2です。
これはコードである:(プロジェクトファイル名/プロジェクトBファイル名)
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
aFileの位置#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
プロジェクトA:
Start of Class
0
1
Stab
End of Class
Start of main
1
2
End of main
プロジェクトB:
の.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);
出力はそれがここimgur使うことができない人のために、アルバムにあります
Start of Class
0
1
Stab
End of Class
Start of main
0
1
End of main
私のコードが面倒であれば謝ってしまいます。私は愚かなやり方でやっています。私はちょうどC++を学び始めました。これが私の試みです。 トランプゲーム。だからこそ大きな疑問は、同じコードが異なる出力を出すのはなぜですか? ありがとうございます
[MCVE]にトリムしてみてください。プロセスをトリミングすると、バグを見つけるのに役立つかもしれません。それで、われわれがバグを見つけ出すのを容易にします。現時点では、良い質問のための余計なコードがあります。 – BoBTFish
2つのバージョンを前処理することもできます。これは '#include'とマクロを処理し、その結果を比較して実際の違いを確認します。 g ++やclang ++では '-E'オプションを用いてこれを行います。 – BoBTFish
@BoBTFishバグはありません。コードは私のプロジェクトAで完璧に動作しています。なぜ同じコピーが動作しないのですか? –