求各位给看看这个重载输出操作符的类,该如何处理

求各位给看看这个重载输出操作符的类
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的功能单纯是把一个文件的内容插入到另一个文件的某个位置,你想在哪儿插入什么都成,只要插入以后别出错误。