C ++字符串不起作用

时间:2017-01-18 20:26:01

标签: c++ string constructor

我想让这个节目在屏幕上显示“Gianna”“Maria”和“M”字符串,但我不能。没有错误,所以我猜我的程序有问题。有什么建议可以修复我的程序吗?

#include <iostream>
#include <string>
using namespace std;
class name
{
    string fName, mName, sName;
    public:
        name (string fName, string mName, string sName){};
        void setFName (string fName);
        void setMName (string mName);
        void setSName (string sName);
        string getFName() const {return fName;}
        string getSName() const {return sName;}
        string getMName() const {return mName;}
        friend ostream & operator <<(ostream &, const name &);
};
ostream& operator<<(ostream& os, const name& n) {
    return os << n.fName << " " << n.sName<< " " << n.mName;
}

int main ()
{
    name myName ("Gianna", "Maria", "M");
    cout<<myName.getFName()<<" "<<myName.getMName()<<" "<<myName.getSName()<<endl;


    return 0;
}

6 个答案:

答案 0 :(得分:3)

你的构造函数:

    name (string fName, string mName, string sName){};

什么都不做。您需要使用参数来初始化您的成员变量。

   name (string f, string m, string s)
         : fName(f), mName(m), sName(s)  {}

答案 1 :(得分:2)

您忘记在构造函数中初始化类的daya成员。

按以下方式定义构造函数

name( const string &fName, const string &mName, const string &sName )
    : fName( fName ), mName( mName ), sName( sName )
{
}

相应地,这些成员函数应该被定义为

    void setFName ( const string &fName)
    {
        this->fName = fName;
    }
    void setMName (const string &mName)
    {
        this->mName = mName;
    }
    void setSName (const string &sName)
    {
        this->sName = sName;
    }

无需将operator <<作为班级的朋友功能。它可以定义为

ostream& operator <<( ostream& os, const name& n ) {
    return os << n.getFName() << " " << n.getMName() << " " << n.getSName();
}

答案 2 :(得分:1)

您的构造函数必须将传递给成员变量的参数分配给不会自动发生的参数。

name (string fName, string mName, string sName) : fName(fName), mName(mName), sName(sName) {};

答案 3 :(得分:1)

对于构造函数,您有三个字符串作为参数,但您不是将成员变量设置为它们的值。您可以在构造函数上使用初始化列表,如下所示......

name (string f, string m, string s) 
    : fName(f), mName(m), sName(s) // member(parameter) format
{

}

...或者您可以实现您拥有的setter存根...

void setFName(string name) { this->fName = name;}

...并在构造函数中使用它们,如...

name (string fName, string mName, string sName) {
    setFName(fName);
    //...
}

答案 4 :(得分:0)

基本上,构造函数中传递的参数会丢失,因为您没有将它分配给类变量。

做类似的事情:

name (string f, string m, string s) : fName(f), mName(m), sName(s){....};

答案 5 :(得分:0)

试试这个。你忘了实现类的构造函数

#include <iostream>
#include <string.h>

using namespace std;
class name
{
    string sFName, sMName, sSName;
    public:
        name (string FName, string MName, string SName);
        void Display();
        void setFName (string fName);
        void setMName (string mName);
        void setSName (string sName);
        string getFName() const {return sFName;}
        string getSName() const {return sSName;}
        string getMName() const {return sMName;}

};

name::name(string FName, string MName, string SName )
{
    sFName = FName;
    sMName = MName;
    sSName = SName;
}

void name::setFName(string fName)
{
      sFName = fName;
}

void name::setMName(string mName)
{
      sMName = mName;
}

void name::setSName(string sName)
{
      sSName = sName;
}

void name::Display()
{
    cout<< sFName<< endl;
    cout<< sMName<< endl;
    cout<< sSName<< endl;
}
int main ()
{
    name myName ("Gianna", "Maria", "M");
    myName.Display();


    return 0;
}