请问如下简单程序错误在什么地方
#pragma warning(disable: 4786)
#include <iostream>
#include <string>
using namespace std;
class Book
{
public:
string GetPublish() {return *m_publishCompany;}
void SetPublish(string *s) {m_publishCompany = s;}
private:
string *m_publishCompany;
};
class PublishFlyweight
{
public:
PublishFlyweight(string s)
{
m_name = s;
}
string GetName()
{
return m_name;
}
private:
string m_name;
};
int main()
{
PublishFlyweight m_publish( "机械工业出版社 ");
Book m_book;
m_book.SetPublish( &(m_publish.GetName()) );
cout < < m_book.GetPublish() < <endl;
return 0;
}
希望输出为:
机械工业出版社
实际上什么都没有输出来,为什么呢?
[解决办法]
string & GetName()
你现在返回一个临时变量,怎么可能可以呢。
[解决办法]
_m_name只是存在于PublishFlyweight这个类域里面的
[解决办法]
m_book.GetPublish()
这个函数不能返回一个值
那只是一个临时的变量
你应该把它赋给一个固定的变量
[解决办法]
1:
string& GetName() //成员方法修改为返回 引用
{
return m_name;
}
[解决办法]
2 :
string str=m_publish.GetName(); //使用局部变量接受,然后传递给下面的成员
m_book.SetPublish( &str );
==============================================================================
请问,为什么不是m_book.SetPublish( str );
你为什么要加一个&?
[解决办法]
楼主,你的程序怎么不好用?
我用完全没问题,
当然我不知道是不是因为你没在return 0之前加一句getchar()的原因,
你可以加上试试,我在DEVCPP下好用
int main()
{
PublishFlyweight m_publish( "机械工业出版社 ");
Book m_book;
m_book.SetPublish( &(m_publish.GetName()) );
cout < < m_book.GetPublish() < <endl;
getchar(); //加这句
return 0;
}
[解决办法]
#include <stdlib.h>
加gechar();