[英]C++ std:cout won't print, despite me using std::endl to enter newline and flush
[英]C++ flush() not working? Can't use endl
对于类分配,我必须重载插入和提取运算符。 我无法将其打印到控制台。
已编辑
抱歉,这是我第一次发布。 我意识到我没有为您发布足够的信息,我已经更新了应有的代码
驱动程序
#include "mystring.h"
#include <iostream>
using namespace std;
int main(){
char c[6] = {'H', 'E', 'L', 'L', 'O'}
MyString m(c);
cout << m;
return 0;
}
mystring.h
class MyString
{
friend ostream& operator<<(ostream&, const MyString&);
public:
MyString(const char*);
~MyString(const MyString&)
private:
char * str; //pointer to dynamic array of characters
int length; //Size of the string
};
mystring.cpp
#include "mystring.h"
#include <iostream>
#include <cstring>
using namespace std;
MyString::MyString(const char* passedIn){
length = strlen(passedIn)-1;
str = new char[length+1];
strcpy(str, passedIn);
}
MyString::~MyString(){
if(str != NULL){
delete [] str;
}
}
ostream& operator << (ostream& o, const MyString& m){
for(int i = 0; i < strlen(m.str); i++){
o << m.str[i];
}
o.flush();
return o;
}
使用ostream::flush()
方法。 如:
ostream& operator << (ostream& o, const MyString& m){
for(int i = 0; i < strlen(m.str)-1; i++){
o << m.str[i];
}
o.flush();
return o;
}
不要尝试从插入器内部冲洗。 没有标准的插入器执行此操作。 只需添加std::cout << '\\n';
在main
调用插入器之后。
这里的问题是std::cout
是行缓冲的。 这意味着它将插入的字符保存在内部缓冲区中,直到看到换行符(或直到明确刷新为止)为止。 如果插入std::string
对象,但不结束该行,您将看到相同的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.