문제

2014-11-20 2 views
4

나는 CFileDialog에 대한 정의를 다음과 같은거야, 아직 VS2013 아직도 내가 전달하고있어 인수에 사용할 수있는 생성자가 없음을 나에게 말하고있다문제

내 코드 :.

CFile theFile; 
char strFilter[] = { "TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||" }; 
CFileDialog fDlg = CFileDialog(TRUE, ".txt", NULL, 0, strFilter); 

결과 오류 :

1 IntelliSense: no instance of constructor "CFileDialog::CFileDialog" matches the argument list argument types are: (int, const char [5], int, int, char [46]) c:\Users\Jonathan\Documents\Visual Studio 2013\Projects\SDI\SDI\MainFrm.cpp 131 21 SDI

그리고 참조 할 수 CFileDialog 생성자 :

explicit CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs 
    LPCTSTR lpszDefExt = NULL, 
    LPCTSTR lpszFileName = NULL, 
    DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
    LPCTSTR lpszFilter = NULL, 
    CWnd* pParentWnd = NULL, 
    DWORD dwSize = 0, 
    BOOL bVistaStyle = TRUE); 

무엇이 문제입니까?

+2

유니 코드 빌드 또는 MBCS입니까? – PaulMcKenzie

+0

@PaulMcKenzie 나는 그 질문에 대답하는 방법을 모르겠습니다. 그것은 빈 슬레이트 MFC 프로그램입니다. 이것은 파일 -> 열린 이벤트 핸들러 – JayB

+0

@ user134788에 입력 한 첫 번째 비트입니다. 문자열 리터럴에 'L'을 붙이고 다시 시도하십시오. 'strFilter'의 타입을'WCHAR'로 변경해야합니다. 만약 당신이 T- 매크로를 사용하고자한다면'_T()'를 써서 리터럴을 감싸고'strFilter [] '타입을'TCHAR'로 사용하십시오. – WhozCraig

답변

4

잘못된 문자열 유형을 사용하고있는 것 같습니다.

빠른 해결책은 TCHAR이 아닌 char을 사용하는 것입니다. 더 나은 솔루션은 넓은 문자열을 사용하고 빌드가 유니 코드인지 확인하는 것입니다.

Visual Studio에서 프로젝트를 만들 때 사용되는 기본 문자 집합 유형은 유니 코드이며 MBCS가 아니라 "설정되지 않음"입니다. 즉, 문자 배열과 포인터를 사용하는 Windows API 및 MFC 함수는 넓은 문자를 사용합니다. 따라서 char, char *, const char*을 사용하면 넓은 문자열을 예상하는 Windows API 함수에서 컴파일되지 않습니다.

코드를 유니 코드 또는 MBCS에 대해 아무것도 알지하지 않는 경우에도, 잘못된 표시는, 기능은 당신이 LPCTSTR의 테이크 유형을 호출하고 있다는 것입니다 - 그것은하지const char *, 그것은 그것이 무엇이다, 즉 TCHAR에 대한 상수 포인터입니다. 지정된 유형을 사용한다는 사실을 알고 자한다면, 좋은 결과를 얻었을 것입니다.

따라서 함수가 유형을 원하면 해당 유형의 변수 또는 표현식을 제공하고 유형이 같다고 생각하면됩니다.

1

확인. 따라서 코드를 다음과 같이 변경했습니다.

CFile theFile; 
TCHAR strFilter[] = { _T("TXT Files (*.txt)|*.txt|All Files (*.*)|*.*||") }; 
CFileDialog fDlg = CFileDialog(TRUE, _T(".txt"), NULL, 0, strFilter); 

그리고 이제는 문제가 없습니다. 귀하의 답변에 감사드립니다!

+1

TCHAR의 또 다른 사항은' L "..."'또는''... "''_T ("... ")'를 사용해야합니다. 이것은 TCHAR이'char' 또는'WCHAR '일 수 있기 때문입니다. – rafeek