1

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

这是代码:

#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;
}
4

2 回答 2

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"));
    }
    

这里是你的代码修复的一个活生生的例子。

我建议您了解课程的运作方式:http ://www.cplusplus.com/doc/tutorial/classes/

于 2013-08-26T16:46:15.193 回答
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"));
}
于 2013-08-26T16:28:19.217 回答