简体   繁体   中英

Call conversion operator does not work on with static const variable

concerning the following piece of code :

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'
}

Why calling the conversion operator directly results in an error, while when using a temporary variable to store the static variable works? Is this some violation of a rule ? I don't get it!

Edit: Using MSVS 2008, no external lib available.

Thanks in advance.

Your operator const std::string () is not const qualified. So only non const objects can call it. StaticEnum::Test is a const object. To solve this problem, do following:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM