두 번째 매개 변수로 enum을 지정할 때 'bool 유형을 정의 할 때가 아니라'C2666 : 2 오버로드가 유사한 변환을하는 경우 VisualC++ (2008)가 혼동되는 이유는 무엇입니까?열거 형, 유사한 변환을 사용하는 생성자 오버로드
두 번째 생성자가 'basic_string'유형이므로 두 번째 생성자를 이미 제외해야합니까?
#include <string>
using namespace std;
enum EMyEnum { mbOne, mbTwo };
class test {
public:
#if 1 // 0 = COMPILE_OK, 1 = COMPILE_FAIL
test(basic_string<char> myString, EMyEnum myBool2) { }
test(bool myBool, bool myBool2) { }
#else
test(basic_string<char> myString, bool myBool2) { }
test(bool myBool, bool myBool2) { }
#endif
};
void testme() {
test("test", mbOne);
}
나는 'ie'라는 참조를 지정하여이 문제를 해결할 수 있습니다. basic_string & myString '이지만'const basic_string & myString '인 경우에는 그렇지 않습니다.
"test ((basic_string)"test ", mbOne);" 또한 작동합니다.
이것이 '! = 0'을 통해 부울로 해석되는 모든 표현식/유형과 관련이 있다고 생각합니다. 모두 같은 :
[C++ Templates : The Complete Guide] (http://www.amazon.com/Templates-Complete-Guide-David-Vandevoorde/dp/0201734842)의 부록 B에서 과부하 해결에 대한 가장 좋은 설명 중 하나를 찾을 수 있습니다.). 이 책의 나머지 부분도 우수하지만, 부록에서는 매우 간단하고 과부하 해결 규칙을 쉽게 참조 할 수있는 목록을 작성합니다. –