Стандартные функции и операции, не работающие в конструкторе классов

Я пытаюсь сделать свой первый урок с конструктором, и это, кажется, ведет себя странно.
Мой класс является производным от 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;
};
};

0

Решение

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 *

-1

Другие решения

bin myBin("e:\Temp\test.txt");

Вы должны исправить вышеприведенную строку следующим образом:

bin myBin("e:\\Temp\\test.txt");

DEMO: http://cpp.sh/7b4k

2

Похоже, вам нужно:

#include <iostream>
1

Использовать std::string тебе нужно:

#include <string>

iostream может включать в себя заранее объявил std::string но без полного определения вы не получите operator<< (или же c_str()).

Некоторые другие ответчики могут быть не в состоянии воспроизвести вашу проблему, потому что разные стандартные библиотеки могут иметь свои iostream полностью сделать #include <string> (это разрешено, но не обязательно).

1
По вопросам рекламы [email protected]