读书人

请教如下简单程序异常在什么地方

发布时间: 2012-03-02 14:40:29 作者: rapoo

请问如下简单程序错误在什么地方
#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();

读书人网 >C++

热点推荐