标准函数和操作在 class 构造函数中不起作用
Standard functions and operations not working in class constructor
我正在尝试使用构造函数创建我的第一个 class,它似乎表现得很奇怪。
我的 class 派生自 filebuf
并且出于某种原因,我无法在构造函数中打开它。
我试图添加一个 cout
语句进行调试,但无法识别 <<
运算符。
#include <iostream>
#include "bin.h"
int main()
{
bin myBin("e:\Temp\test.txt");
system("PAUSE");
return 0;
}
bin.h
#pragma once
#include <fstream>
#include <cstdlib>
#include <cstring>
class bin : private std::filebuf {
int buffSize = 1000;
char* buffer;
unsigned int length;
short int buffCounter;
public:
bin(std::string fileName)
{
open(fileName.c_str(), std::ios::in | std::ios::out | std::ios::trunc);
if (!is_open())
std::cout << "ERROR: failed to open file " << fileName << std::endl;
//set all IO operations to be unbufferred, buffering will be managed manually
setbuf(0, 0);
//create buffer
buffer = new char[buffSize];
};
virtual ~bin()
{
delete buffer;
};
};
bin myBin("e:\Temp\test.txt");
您必须按如下方式更正上面的行:
bin myBin("e:\Temp\test.txt");
看来您需要:
#include <iostream>
std::cout << "ERROR: failed to open file " << fileName << std::endl;
应该是
std::cout << "ERROR: failed to open file " << fileName.c_str() << std::endl;
std::cout
并不总是接受 std::string
但确实接受 const char *
要使用 std::string
,您需要:
#include <string>
iostream
include 可能已经前向声明了 std::string
,但如果没有完整的定义,您将无法获得 operator<<
(或 c_str()
)。
其他一些回答者可能无法重现您的问题,因为不同的标准库可能 iostream
完全做到 #include <string>
(这是允许的,但不是必需的)。
我正在尝试使用构造函数创建我的第一个 class,它似乎表现得很奇怪。
我的 class 派生自 filebuf
并且出于某种原因,我无法在构造函数中打开它。
我试图添加一个 cout
语句进行调试,但无法识别 <<
运算符。
#include <iostream>
#include "bin.h"
int main()
{
bin myBin("e:\Temp\test.txt");
system("PAUSE");
return 0;
}
bin.h
#pragma once
#include <fstream>
#include <cstdlib>
#include <cstring>
class bin : private std::filebuf {
int buffSize = 1000;
char* buffer;
unsigned int length;
short int buffCounter;
public:
bin(std::string fileName)
{
open(fileName.c_str(), std::ios::in | std::ios::out | std::ios::trunc);
if (!is_open())
std::cout << "ERROR: failed to open file " << fileName << std::endl;
//set all IO operations to be unbufferred, buffering will be managed manually
setbuf(0, 0);
//create buffer
buffer = new char[buffSize];
};
virtual ~bin()
{
delete buffer;
};
};
bin myBin("e:\Temp\test.txt");
您必须按如下方式更正上面的行:
bin myBin("e:\Temp\test.txt");
看来您需要:
#include <iostream>
std::cout << "ERROR: failed to open file " << fileName << std::endl;
应该是
std::cout << "ERROR: failed to open file " << fileName.c_str() << std::endl;
std::cout
并不总是接受 std::string
但确实接受 const char *
要使用 std::string
,您需要:
#include <string>
iostream
include 可能已经前向声明了 std::string
,但如果没有完整的定义,您将无法获得 operator<<
(或 c_str()
)。
其他一些回答者可能无法重现您的问题,因为不同的标准库可能 iostream
完全做到 #include <string>
(这是允许的,但不是必需的)。