Невозможно переопределить to_String из-за целого числа в C++

У меня есть класс Employee, который имеет несколько подклассов. Я хочу переопределить функцию to_String в моем суперклассе и во всех подклассах, но я не могу заставить ее работать из-за целого числа в суперклассе:

class Employee{
public:
    Employee(...){
        ...
    }
    virtual ~Employee(){
        ...
    }
    virtual string to_String(){
        string s = stringstream(this->someInteger);
        return s;
    }
    virtual string profession(){
        ...
    }
private:
    int someInteger;
};

У меня есть функция «виртуальная строка to_String () {...}», где я пытаюсь вернуть некоторое целое число в формате строки. Однако, когда я пытаюсь скомпилировать это, он дает мне сообщение об ошибке «недопустимое преобразование из 'int ' на 'std::ios_base::openmode {он же std::_Ios_Openmode}' [fpremissive].

Я также попытался сделать функцию получения для целого числа, что также не решает проблему.

Однако я попытался взглянуть на проблему с другой точки зрения и отказаться от функции to_String и вместо этого использовать функцию get для получения целого числа. Но моя проблема заключается в том, что я не могу получить доступ к функциям get подклассов, например "getSomeString()" в этом подклассе:

class Engineer : public Employee{
public:
    Engineer(...):Employee(...){

    }
    ~Engineer(){
        ...
    }
    string profession(){
        return "someProfession";
    }
    string getSomeString(){
        return this->someString;
    }
    ...
private:
    string someString;

};

Затем я пытаюсь получить доступ к функции getSomeString() в основной функции:

   fout << employees[i]->getSomeInteger(); //THIS WORKS!
   if(employees[i]->profession() == "someProfession"){
       fout << employees[i]->getSomeString(); //but this doesnt work
   }

Затем я получаю сообщение об ошибке, в котором говорится, что «класс Employee» не имеет члена с именем «getSomeString».

Поэтому я попытался бросить сотрудника [i], чтобы иметь доступ к нему стабильно, как объяснено a-parent-pointer-in-c">здесь. Что тоже не сработало..

Теперь мой вопрос; как заставить это работать? Что я делаю не так? И какая из этих версий для решения проблемы будет лучше в данном случае, или я все делаю совсем не так?


person Wonderwoman    schedule 06.02.2014    source источник
comment
Должен ли getSomeString переопределять to_String? У них разные имена! Employee не имеет функции getSomeString, как говорит ошибка.   -  person Joseph Mansfield    schedule 06.02.2014
comment
У меня есть виртуальная строка функции to_String(){...}, где я пытаюсь вернуть некоторое целое число в строковом формате. Однако, когда я пытаюсь это скомпилировать, мне выдается сообщение об ошибке: недопустимое преобразование из 'int' в 'std::ios_base::openmode {aka std::_Ios_Openmode}' [fpremissive]. Да, обратите внимание на эту ошибку и выясните, что происходит. Проблема в том, что когда вы хотите привести целое число к строке, вы вызываете конструктор строкового потока с целым числом. Это не то, что вы собираетесь делать. Исправить преобразование строк.   -  person m24p    schedule 06.02.2014
comment
Как вы имеете в виду, что мне нужно исправить преобразование строк? Что не так с преобразованием строк, как показано в коде?   -  person Wonderwoman    schedule 06.02.2014


Ответы (1)


Вместо

string s = stringstream(this->someInteger);

использовать

string s = std::to_string(this->someInteger);
person Vlad from Moscow    schedule 06.02.2014
comment
Ну, это проблема (наряду с тем фактом, что они делают return "s"; вместо return s;), но это не причина, по которой они получают ошибку. - person Joseph Mansfield; 06.02.2014
comment
@Joseph Mansfield Сообщение об ошибке: недопустимое преобразование из 'int' в 'std::ios_base::openmode {aka std::_Ios_Openmode}' - person Vlad from Moscow; 06.02.2014
comment
Не уверен, как вокруг прокрались. Я отредактировал пост. Я пытался использовать std::to_String, но он говорит, что to_String не является членом 'std'. - person Wonderwoman; 06.02.2014
comment
@user1608638 user1608638 Правильное имя функции — to_string, а не to_String. - person Vlad from Moscow; 06.02.2014
comment
@user1608638 std::to_string() требует компилятора, совместимого с С++11. - person αλεχολυτ; 06.02.2014
comment
@VladfromMoscow О, извини, я схожу с ума. - person Joseph Mansfield; 07.02.2014