2013-08-26 2 views
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; 
} 
+3

Похоже, работа на дому. что ты уже испробовал? – Hrishi

+3

Интересное использование 'strset' в' main() '. Я думаю, что исправление ошибок * компиляции * -time было бы более высоким приоритетом. – WhozCraig

+0

«Просто извините, похоже, не работает»? что, если вы попытаетесь скомпилировать это? – 4pie0

ответ

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

Это должно быть «ostream_iterator » –

+0

@DaveS, большое спасибо, исправлено – cpp

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 - живой пример вашего кода.

Я хотел бы предложить вам understan, как работает класс: http://www.cplusplus.com/doc/tutorial/classes/

+1

И я бы посоветовал [www.cppreference.com] (http://en.cppreference.com/w/cpp/language/classes) для C++ и стандартную библиотечную документацию, рекомендации и образцы. – WhozCraig

+0

@WhozCraig +1 Отличный совет;) –

+0

спасибо за совет и да, он должен быть динамичным. – user2420395