2017-02-01 2 views
0

私はクラス内にいくつかのデータ型が定義されたAクラスを持っています。プログラム内では、タイプAのベクトルを定義し、テキストファイルからこのベクトルに読み込みます。std :: vector <class>はデバッグを行いますが、リリース時は無効にします

私がデバッグしているとき、ベクトルは "満ちる"と私はそこから値を読み取ることができます - すべてが計画どおりに動作します。しかし、リリース版をビルドして.exeを実行すると、ベクターは空になります。残りのプログラムは正常に動作しますが、値をプッシュしないだけです。

私はかなりC++を使い慣れていないので、それは私のコンストラクタ関数と関係がありますか、あるいはおそらくenumをどのように処理するのでしょうか?

#include "stdafx.h" 
#include <iostream> 
#include <string> 
#include <vector> 
#include <fstream> 

enum class Type 
{ 
    Type1 
}; 

Type convertStringToType(std::string input) 
{ 
    return Type::Type1; 
} 

class A 
{ 
public: 
    int num; 
    std::string str; 
    Type typ; 

    A(int refNumber, std::string name, Type type) 
    { 
     num = refNumber; 
     str = name; 
     typ = type; 
    } 
}; 

std::vector<A> readFileIntoVector(std::string filename) 
{ 
    std::ifstream readFile(filename); 
    std::vector<A> tempVector; 

    std::string tempNum = ""; 
    std::string tempStr = ""; 
    std::string tempTyp = ""; 

    std::getline(readFile, tempNum, ','); 
    std::getline(readFile, tempStr, ','); 
    std::getline(readFile, tempTyp, ','); 

    while (readFile) 
    { 
     tempVector.push_back(A(std::stoi(tempNum), tempStr, convertStringToType(tempTyp))); 

     std::getline(readFile, tempNum, ','); 
     std::getline(readFile, tempStr, ','); 
     std::getline(readFile, tempTyp, ','); 

    } 
    return tempVector; 
} 

int main() 
{ 
    std::vector<A> exampleVector = readFileIntoVector("Text.txt"); 

    if (exampleVector.empty() == true) 
    { 
     std::cout << "Vector is empty."; 
     system("PAUSE"); 
    } 
    else 
    { 
     int a = 1; 
     do 
     { 
      std::cin >> a; 
      if (a == 0 || a == 1) 
      { 
       std::cout << exampleVector.at(a).num << "\n"; 
       std::cout << exampleVector.at(a).str << "\n"; 
      } 
     } while (a == 0 || a == 1); 

     return 0; 
    } 
} 

これはTEXT.TXTである:ここに私のMCVEある

1, String1, Type1, 
2, String2, Type1, 
+1

"Text.txt"には何がありますか?あなたのデバッグとリリースのビルドが同じファイルを開いてもよろしいですか?デバッグ/リリースビルドが別のディレクトリ(Visual Studioなど)で生成されている場合は、 "Text.txt"がデバッグの出力ディレクトリにのみ存在する可能性があります。 –

+0

私はそれが長すぎる場合はお詫び申し上げます...私は変更する必要があるint、文字列または列挙型かどうかはわかりません。私は数日前からこれを見つめていて、正直であるために苦労しています。 – Jonathan

+2

プログラムでテキストファイルが見つかるのを確認しましたか?あなたが助けを受けようとしている場合、これは重要です。 – smac89

答えて

1

私はコメントで述べたように、最も可能性の高い問題は、プロジェクトのリリースビルドを作成したときに、プログラムが依存するテキストファイルがそれぞれのフォルダに含まれていなかったということです。

このファイルを修正するには、このファイルを自分自身のフォルダに含めるか、プログラムがそのテキストファイルに依存していることをVSに示す方法を見つけて、自動的にリリースフォルダにコピーされます。私はVSを使用しないので、最後の部分の可能性は分かりませんが、あなたがそのアイデアを得ることを願っています。

-1

は二つの可能性があります:あなたはデバッグ中に正しい値を取得することができることに述べたように

  1. デバッグモードでは、.txtファイルから正しく読み込み、ベクトルで正しい値を取得できる可能性がありますが、リリースモードでデバッグしているときは、正しい値が表示されませんあなたのベクトルが正しい値を得ていても、リリースモードでのガベージ値を含むウォッチリストを見つけることができます。

  2. あなたは.txtファイルを取得していませんが、その場合はデバッグバージョンでも音が出てはいけません。

関連する問題