关于以下代码:
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,没有可用的外部库。
提前致谢。
答案 0 :(得分:4)
您的operator const std::string ()
不符合const
条件。因此,只有非const
个对象才能调用它。 StaticEnum::Test
是const
个对象。要解决此问题,请执行以下操作:
operator std::string const() const {return myDir;}
^^^^^