我很难创建输出成员函数

时间:2013-08-26 16:21:54

标签: c++ output member-functions

我被困在班级的输出成员函数上。我不知道如何创建它,只是简单地宣传它似乎不起作用。任何其他建议都会很棒。提前谢谢

这是代码:

#include <iostream>
#include <string>
#include <vector>


using namespace std;

class StringSet
{
    public:
    StringSet(vector<string> str);
    void add(string s);
    void remove(int i);
    void clear();
    int length();
    void output(ostream& outs);
    private:
    vector<string> strarr;
};
StringSet::StringSet(vector<string> str)
{
    for(int k =0;k<str.size();k++)
    {
        strarr.push_back(str[k]);
    }
}
void StringSet::add(string s)
{
    strarr.push_back(s);
}
void StringSet::remove(int i)
{
    strarr.erase (strarr.begin()+(i-1));
}
void StringSet::clear()
{
    strarr.erase(strarr.begin(),strarr.end());
}
int StringSet::length()
{
    return strarr.size();
}
void StringSet::output()
{

}

int main()
{
    vector<string> vstr;
    string s;
    for(int i=0;i<10;i++)
    {
        cout<<"enter a string: ";
        cin>>s;
        vstr.push_back(s);

    }
    StringSet* strset=new StringSet(vstr);
    strset.length();
    strset.add("hello");
    strset.remove(3);
    strset.empty();
    return 0;
}

2 个答案:

答案 0 :(得分:2)

好的,您应首先解决代码中的一些错误:

  • 您使用指向StringSet的指针,之后您尝试使用.运算符而不是->来访问成员函数。无论如何,你真的需要动态分配你的对象吗?

    StringSet strset(vstr); // No need to allocated dynamically your object
    
  • 之后,您正在调用一个不存在的empty()方法......

  • 此外,如果您继续进行动态分配,请不要忘记释放您的记忆:

    StringSet* strset = new StringSet(vstr);
    // ...
    delete strset;  // <- Important
    
  • 最后,我认为你的函数输出应该在流中写入向量的内容,你可以这样做:

    #include <algorithm> // For std::copy
    #include <iterator>  // std::ostream_iterator
    
    void StringSet::output( ostream& outs )
    //                      ^^^^^^^^^^^^^ don't forget the arguments during the definition
    {
        std::copy(strarr.begin(), strarr.end(), std::ostream_iterator<string>(outs, "\n"));
    }
    

HERE是您修复代码的实例。

我建议你要理解课程是如何运作的:http://www.cplusplus.com/doc/tutorial/classes/

答案 1 :(得分:0)

如果您的output函数要打印StringSet对象的状态,您可以实现如下:

#include<iterator>  //std::ostream_iterator
#include<algorithm>  //std::copy

void StringSet::output(ostream& outs)
{
    std::copy(starr.begin(), starr.end(), std::ostream_iterator<string>(outs, "\n"));
}