调用转换运算符不适用于静态const变量

时间:2011-11-23 08:07:03

标签: c++ enums

关于以下代码:

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 个答案:

答案 0 :(得分:4)

您的operator const std::string ()不符合const条件。因此,只有非const个对象才能调用它。 StaticEnum::Testconst个对象。要解决此问题,请执行以下操作:

operator std::string const() const {return myDir;}
                             ^^^^^