2017-07-19 19 views
0

私は、ユーザーが提供しているファイル名保存するクラスがあります。私は、ファイルを開こうとすると、しかしファイル名が変数格納されたファイルを開く

string EMNfn;    // IDF file EMN name 

// IDF file EMN name 
void CcaAna::put_EMNfn(string s) 
{ 
    CcaAna::EMNfn = s; 
} 

string CcaAna::get_EMNfn() 
{ 
    return EMNfn; 
} 

を、と私はそれが存在することがわかっています私は次のように使用しています現在のディレクトリに:

femn.open(cCCA.get_EMNfn()); 

私はコンパイルエラーC2664を取得...からパラメータ1を変換することはできません「クラスのstd ::のbasic_string、クラスのstd ::アロケータ>」のconst「へchar * '

私が使ってみた場合:それはコンパイルが、私のエラーコードトリップ

femn.open(cCCA.get_EMNfn().c_str()); 

:正常に動作しますeverthingしかし

if(!femn) 
{ 
    cout << "Open of Original EMN file failed\n"; 
    cout << "EMN file: " << cCCA.get_EMNfn() << endl; 
    cout << "Press any key to exit" << endl; 
    ch = getchar(); 
    return 1; 
} 

私は直接にそれを入力します。

femn.open("262-003841-7-23.emn"); 

は、アイデアが不足してストリームを開く別の方法はありますか?

molbdnilo - 私はあなたが何かに上だと思います(下記参照)

OK私は後2本のCOUTラインを追加し、私はコードの下OUTPUT含まれています:

cout << "EMN file: " << cCCA.get_EMNfn() << endl; 
// THIS WORKS 
// femn.open("262-003841-7-23.emn"); 
    femn.open(cCCA.get_EMNfn().c_str()); 
// femn.open(cCCA.get_EMNfn()); 

cout << "this works: " << "262-003841-7-23.emn" << endl; 
cout << "*****" << cCCA.get_EMNfn() << "*****" << endl; 

OUTPUTを:
処理USER INPUTファイル...
EMNファイル: "262-003841-7-23.emn"
この作品:262-003841-7-23.emn
***** "262-003841-7-23.emn" *****オリジナルEMNファイルの
オープンは
EMNファイルに失敗しました:任意の "262-003841-7-23.emn"
プレスをキーを終了する

私が見ているのは、格納されている文字列が "それの周りにあることです。これらを削除するC++の方法はありますか?

+0

文字列が同一であることは確かですか?空白は特に見つけるのが非常に難しいことがあります。 – molbdnilo

+0

IDEまたはデバッガでアプリケーションを起動している場合、作業ディレクトリは実行ファイルの場所と異なる場合があります。 –

+0

[参考文献](http://en.cppreference.com/w/cpp/language/reference)の使用方法を学ぶ必要があります。不必要な文字列のコピーをたくさん作っています。 –

答えて

-1

文字列変数を正しく割り当てていません!文字列変数に=演算子を割り当てるべきではありません。 Hereは、文字列を操作するためのリファレンスです。

ここにあなたのタスクを実行するための多くの方法がありますが1である:

#include <string.h> ... strcpy(CcaAna::EMNfn,s);//instead of CcaAna::EMNfn=s;

多分これが動作し、そうでない場合はリンクをチェックして、文字列で作業するための正しい方法を使用する場合があります。

歓声

+0

これはC++の 'std :: string'sであり、Cの文字列ではありません。 – molbdnilo

+0

そのリンクはとても良いですが、私はさらに混乱しています。私の宣言はすべてC++のアプローチ "文字列変数"を使用していますリンクをコピーすると、C++の文字列は '='記号で終わっているのと同じです。私は、このアプローチを使用すると、コンパイルエラーと関係があると信じさせています: 'code' femn.open(cCCA.get_EMNfn()); 'code' コンパイルエラーC2664 ... 'class std :: basic_string、class std :: allocator>'から 'const char *'にパラメータ1を変換できません –

関連する問題