ユーザーにファイル名を尋ねると、そのファイルが開かれるプログラムを作成しようとしています。コンパイルすると、次のエラーが発生します。
no matching function for call to std::basic_ofstream<char,
std::char_traits<char> >::basic_ofstream(std::string&)
これは私のコードです:
using namespace std;
int main()
{
string asegurado;
cout << "Nombre a agregar: ";
cin >> asegurado;
ofstream entrada(asegurado,"");
if (entrada.fail())
{
cout << "El archivo no se creo correctamente" << endl;
}
}
_std::ofstream
_ は、C++ 11以降を使用している場合にのみ、_std::string
_で作成できます。通常、これは_-std=c++11
_(gcc、clang)で行われます。 c ++ 11にアクセスできない場合は、_std::string
_のc_str()
関数を使用して、_const char *
_をofstream
コンストラクターに渡すことができます。
また、 Ben が 指摘 であるため、コンストラクターの2番目のパラメーターに空の文字列を使用しています。提供される場合の2番目のパラメーターは、タイプ_ios_base::openmode
_である必要があります。
これであなたのコードは
_ofstream entrada(asegurado); // C++11 or higher
_
または
_ofstream entrada(asegurado.c_str()); // C++03 or below
_
また、次のことをお読みになることをお勧めします。 「名前空間stdを使用する」が悪い習慣と見なされるのはなぜですか?
コンストラクターofstream entrada(asegurado,"");
は、 std::ofstream
のコンストラクターと一致しません。 2番目の引数は ios_base
である必要があります。以下を参照してください。
entrada ("example.bin", ios::out | ios::app | ios::binary);
//^ These are ios_base arguments for opening in a specific mode.
プログラムを実行するには、ofstream
コンストラクターから文字列リテラルを削除するだけです。
ofstream entrada(asegurado);
ここに実例があります。 を参照してください
c++03
以下を使用している場合、std::string
をofstream
のコンストラクターに渡すことはできません。c文字列を渡す必要があります。
ofstream entrada(asegurado.c_str());