我有一个烦人的c++流外错误

I have an annoying c++ outstream bug

本文关键字:错误 c++ 有一个      更新时间:2023-10-16

这段代码从C:\a\b.txt的txt文件中读取正确的x,y坐标集。我知道ifstream正在工作,因为我使用了cout进行验证。它不会为我创建新文件。有人建议使用close(),它只创建了一个文件。然后我又试了很多次,但都不会创建文件。我正在输入:C:\a\C.txt

我认为我的代码没有任何问题。有人能发现问题或提出解决方案吗?

#include "lib.h"
#include <iostream>
#include <string>
using namespace std;
//....Point class and istream>> operator code
int main()
{
//....ifstream code
std::string filename;
cout << "Enter output filename: ";
std::getline(cin, filename);
ofstream ost(filename.c_str(), std::ofstream::out);
if (!ost.is_open()) cerr << "can't open output file: " << filename << endl;
    for(int i=0; i<points.size(); ++i)
        ost<<'('<<points[i].x<<','<<points[i].y<<')'<<endl;
        cout <<"got here 6"<<endl;
    ost.close();
    keep_window_open();
    return 0;
}

代码运行后,MS编译器在输出框中给出以下消息:

project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64ntdll.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:Program FilesAVAST SoftwareAvastsnxhk.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64kernel32.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64KernelBase.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64msvcp100d.dll', Symbols loaded.
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64msvcr100d.dll', Symbols loaded.
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64user32.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64gdi32.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64lpk.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64usp10.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64msvcrt.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64advapi32.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64sechost.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64rpcrt4.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64sspicli.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64cryptbase.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64imm32.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64msctf.dll', Cannot find or open the PDB file
'project chap 10 ex 1.exe': Loaded 'C:WindowsSysWOW64dwmapi.dll', Cannot find or open the PDB file
The thread 'Win32 Thread' (0xacc) has exited with code 0 (0x0).
The program '[6132] project chap 10 ex 1.exe: Native' has exited with code 0 (0x0).
#include "lib.h"
#include <iostream>
#include <string>
using namespace std;
//....Point class and istream>> operator code
int main()
{
    //....ifstream code
    ofstream ost(filename, std::ofstream::out); // filename is never initialized?
    if (ost.is_open()) 
    {
        for(int i=0; i<points.size(); ++i)
        {
            ost<<'('<<points[i].x<<','<<points[i].y<<')'<<endl;
        }
        cout <<"got here 6"<<endl;
        ost.close();
    }
    else
    {
        cerr << "Unable to open file:  " << filename << endl;
    }
    keep_window_open();
    return 0;
}

使用您显示的代码,唯一的问题(除了糟糕的格式)是您从未初始化filename,并且如果ofstream无法打开,您仍然尝试写入。