我被困在班级的输出成员函数上。我不知道如何创建它,只是简单地宣传它似乎不起作用。任何其他建议都会很棒。提前谢谢
这是代码:
#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;
}
答案 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"));
}