C++ 我一直在创建输出成员函数

C++ 我一直在创建输出成员函数,c++,output,member-functions,C++,Output,Member Functions,我被这个类的输出成员函数卡住了。我不知道如何创建它,只是简单地说它似乎不起作用。另外,任何其他建议都会很好。提前谢谢 代码如下: #include <iostream> #include <string> #include <vector> using namespace std; class StringSet { public: StringSet(vector<string> str); void add(str

我被这个类的输出成员函数卡住了。我不知道如何创建它,只是简单地说它似乎不起作用。另外,任何其他建议都会很好。提前谢谢

代码如下:

#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;
}
#包括
#包括
#包括
使用名称空间std;
类字符串集
{
公众:
StringSet(矢量str);
无效添加(字符串s);
无效删除(int i);
无效清除();
int length();
无效输出(ostream和outs);
私人:
向量斯特拉尔;
};
StringSet::StringSet(向量str)
{

对于(int k=0;k如果
输出
函数要打印
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"));
}
\include//std::ostream\u迭代器
#包括//标准::复制
void StringSet::输出(ostream&out)
{
std::copy(starr.begin()、starr.end()、std::ostream_迭代器(outs,“\n”);
}

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

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

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

  • 另外,如果您继续使用动态分配,请不要忘记释放内存:

    StringSet* strset = new StringSet(vstr);
    // ...
    delete strset;  // <- Important
    
    StringSet*strset=新的StringSet(vstr);
    // ...
    
    删除strset;//看起来像是家庭作业。到目前为止您尝试了什么?在
    main()
    中有趣地使用
    strset
    。我认为修复编译时错误将是一个更高的优先级。“简单地说它似乎不起作用”如果你尝试编译这个程序,那应该是什么?应该是“OrthyType迭代器”,我建议C++和标准库文档、建议和示例。@ WoOsCurig + 1完美建议;@ USER 2420395奇怪……这样,调用你的成员函数,如:<代码> Strut-长度(),< /C> >。
    #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"));
    }