首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-02 
请问如下简单程序错误在什么地方#pragmawarning(disable:4786)#includeiostream#includestringusingna

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

热点排行