Оператор преобразования вызовов не работает со статической переменной const - PullRequest
1 голос
/ 23 ноября 2011

относительно следующего фрагмента кода:

StaticEnum.h

#pragma once

#include <string>

class StaticEnum
{
public:
    static StaticEnum const Test;
    operator std::string const() {return myDir;}
private:
    StaticEnum(std::string const & dir_in):myDir(dir_in){}
    std::string myDir;
};

StaticEnum.cpp

#include "StaticEnum.h"

StaticEnum const StaticEnum::Test("patient");

main.cpp

#include "StaticEnum.h"

int main()
{
    StaticEnum a = StaticEnum::Test;
    StaticEnum b(StaticEnum::Test);

    std::string aStr = static_cast<std::string>(a);
    std::string bStr = static_cast<std::string>(b);

    std::cout << "Test a : " << static_cast<std::string>(a) << std::endl;
    std::cout << "Test b : " << static_cast<std::string>(b) << std::endl;
    //std::cout << "Test direct : " << static_cast<std::string>(StaticEnum::Test); Error    1   error C2440: 'static_cast' : cannot convert from 'const StaticEnum' to 'std::string'
}

Почему вызов оператора преобразования напрямую приводит к ошибке, в то время как при использовании временной переменной для хранения статической переменной работает? Это какое-то нарушение правила? Я не понимаю!

Редактировать: При использовании MSVS 2008 внешняя библиотека недоступна.

Заранее спасибо.

1 Ответ

4 голосов
/ 23 ноября 2011

Ваш operator const std::string () не квалифицирован const. Так что только не const объекты могут вызывать его. StaticEnum::Test является const объектом. Чтобы решить эту проблему, сделайте следующее:

operator std::string const() const {return myDir;}
                             ^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...