относительно следующего фрагмента кода:
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 внешняя библиотека недоступна.
Заранее спасибо.