读书人

求各位给看看这个重载输出操作符的类,

发布时间: 2012-03-21 13:33:15 作者: rapoo

求各位给看看这个重载输出操作符的类
class Print
{
private:
std::string str;
public:
Print(const std::string s=" "):str(s){}
friend std::ostream& operator << (std::ostream& os,const Print& pri)
{
os<<pri.str;
return os;}
};
编译器警告:1>e:\我的文档\c++程序\visual studio 2010\130\130\print.h(10): warning C4717: “operator<<”: 如递归所有控件路径,函数将导致运行时堆栈溢出
运行程序时,不输出

[解决办法]

#include "stdafx.h"
#include <string>
#include <iostream>
class Print
{
private:
std::string str;
public:
Print(const std::string s=" "):str(s){}
friend std::ostream& operator<<(std::ostream& os,const Print& pri)
{
os<<pri.str;
return os;
}
};

int main()
{
Print obj("xx");
std::cout<<obj;
return 0;
}

没有问题啊



[解决办法]
#include <iostream>
#include <string> // 这个 << std::string在string里定义的。没有<< string,而且string可以自动转换成Print(因为你的构造方法)所以你<< ptr.str的时候自动用ptr.str创建一个新Print调用<< Print

using namespace std;

class Print
{
private:
std::string str;
public:
Print(const std::string s=" "):str(s){}
friend std::ostream& operator << (std::ostream& os,const Print& pri)
{
os<<pri.str;
return os; }
};

Print p("12345");

int main()
{
cout<<p;
}
[解决办法]
#include的功能单纯是把一个文件的内容插入到另一个文件的某个位置,你想在哪儿插入什么都成,只要插入以后别出错误。

读书人网 >C++

热点推荐