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.