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

HEREは、修正されたコードの実際の例です。

クラスの仕組みを理解することをお勧めします: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 に答える