C ++ wifstream : 호환되지 않는 유형 char const *, wchar_t const *

알렉스

저는 여기서 DirectX 3D 모델 로딩 튜토리얼을 따르고 있으며 진행 하면서 코드의 작은 부분을 테스트하고 있습니다. .obj 파일을로드하려면 와이드 파일 스트림을 사용해야하며, 튜토리얼에서는 와이드 문자열을 전달해야하는 새 스트림을 초기화하라는 메시지를 표시합니다.

시연 된 직렬 구현을 깔끔한 OO 패키지로 변환하고 싶기 때문에 자습서에서 약간 벗어 났지만 읽기를 위해 변수 incompatible type char const* to wchar_t const*를 초기화하려고 하면 오류가 발생합니다.file

이 문제를 어떻게 해결할 수 있습니까?

class Stream {
private:
    std::wifstream file;
public:
    bool open_file(std::wstring &filename) {
        file = std::wifstream(filename.c_str());    // error thrown here.
    }
};

openmain 에서 함수 호출 .

std::wstring filename = "test_read.txt";
if(d.open_file(filename))
{
    // Do read processing here
}

미리 감사드립니다.

궤도의 가벼움 레이스

우선 스트림할당 하려고하는데 그렇게 할 수 없습니다. 스트림은 컨테이너가 아니라 데이터 흐름입니다 . 따라서 복사하거나 할당 할 수 없습니다. 대신 open스트림 객체 멤버 함수를 사용할 수 있습니다 .

class Stream {
private:
    std::wifstream file;
public:
    bool open_file(std::wstring &filename) {
        file.open(filename.c_str());
    }
};

그런 다음 파일 이름 문제로 돌아갑니다. 읽고있는 튜토리얼이 잘못되었습니다 . 모든 basic_ifstream인스턴스화에 다음과 같은 오버로드를 사용할 수 있습니다 .

void open( const char *filename,
           ios_base::openmode mode = ios_base::in );
void open( const std::string &filename,                                  
           ios_base::openmode mode = ios_base::in );

즉, 관계의 CharT스트림의 만 정직 - 투 - 신 const char*std::string파일 이름을 허용해야한다.

아마도이 자습서는 Microsoft의 표준 라이브러리 구현 에서 제공하는 비표준 확장을 기반으로 가정 하여 const wchar_t*. 이식 가능한 코드를 작성하려면 이러한 오버로드를 무시하십시오.

마지막으로 현재에서 아무것도 반환하지 않으므로 open_file정의되지 않은 동작이 발생합니다.

수정 된 코드는 다음과 같습니다.

class Stream {
private:
    std::wifstream file;
public:
    bool open_file(const std::string& filename) {
        file.open(filename);    // file.open(filename.c_str()) in C++03
        return file.is_open();
    }
};

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ "const wchar_t"유형의 인수 * "wchar_t"유형의 매개 변수와 호환되지 않음

분류에서Dev

const wchar_t 유형을 LPTSTR로 변환하는 방법 (C ++)

분류에서Dev

인수 유형 "WCHAR *"은 "const char *"유형의 매개 변수와 호환되지 않습니다.

분류에서Dev

const wchar_t *를 WCHAR *로 변환

분류에서Dev

호환되지 않는 유형 'void (^ __ strong) (int, const char *, int)'에서 'void (*) (int, const char *, int)'에 할당

분류에서Dev

"const char **"유형의 인수가 "const char *"유형의 매개 변수와 호환되지 않습니다.

분류에서Dev

오류 : 피연산자 유형이 호환되지 않습니다 ( "int"및 "const char *") C ++

분류에서Dev

인수 1을 'wchar_t [5]'에서 'const char *로 변환 할 수없는 win32 atoi 문제

분류에서Dev

인수 1을 'ATL :: CStringT <wchar_t, ATL :: StrTraitATL <wchar_t, ATL :: ChTraitsCRT <wchar_t >>>'에서 'const char *'로 변환 할 수 없습니다.

분류에서Dev

C ++에서 문자 비교- "char"유형의 인수가 "const char * 유형의 매개 변수와 호환되지 않습니다.

분류에서Dev

LOWORD (wParam)을 const wchar_t *로 변환

분류에서Dev

문자열 매개 변수 const char * 및 const wchar_t *

분류에서Dev

const char * 반환 유형

분류에서Dev

IntelliSense : "_TCHAR *"유형의 인수가 "const char *"유형의 매개 변수와 호환되지 않습니다.

분류에서Dev

'const char *'가 필요하지만 C에서 인수는 'char **'유형입니다.

분류에서Dev

VISUAL STUDIO에서 오류 발생 : 오류 C2664 : '_chmod': 매개 변수 1을 'wchar_t [260]'에서 'const char *'로 변환 할 수 없습니다.

분류에서Dev

Objective-c : 반환 유형 __strong const char *는 무엇을 의미합니까?

분류에서Dev

MSVC (VS2015)에서 "C와 호환되지 않는"것으로 간주되는`char * const` 필드

분류에서Dev

비 Objective-C 포인터 유형 'const UInt8 *'(일명 'const unsigned char *')을 'NSData *'로 캐스트하는 것은 ARC에서 허용되지 않습니다.

분류에서Dev

사용중인 데이터 유형에 문제가 있습니까? (const char *의 인수는 LPCTSTR 유형의 매개 변수와 호환되지 않습니다.)

분류에서Dev

char * 및 wchar_t * 유형의 C- 문자열 비교

분류에서Dev

const char []이 항상 const char *로 변환되는 이유는 무엇입니까?

분류에서Dev

System :: String ^에서 const wchar_t로 문자열 변환 *

분류에서Dev

이진 '연산자 +'에 'const char *'및 'const char [2]'유형의 유효하지 않은 피연산자

분류에서Dev

이진 'operator +에 대한'const char [8] '및'const char * '유형의 유효하지 않은 피연산자

분류에서Dev

(const char *) ++ 또는 (const char) ++?

분류에서Dev

컴파일 시간에 유형이 char 또는 wchar_t인지 확인하십시오.

분류에서Dev

"상태 오류 (활성) E0513"const wchar_t * "유형의 값을"wchar_t * "유형의 엔티티에 할당 할 수 없음"수정 방법

분류에서Dev

fopen 호환되지 않는 유형 char (*) [9] 대신 C에서 char (*)

Related 관련 기사

  1. 1

    C ++ "const wchar_t"유형의 인수 * "wchar_t"유형의 매개 변수와 호환되지 않음

  2. 2

    const wchar_t 유형을 LPTSTR로 변환하는 방법 (C ++)

  3. 3

    인수 유형 "WCHAR *"은 "const char *"유형의 매개 변수와 호환되지 않습니다.

  4. 4

    const wchar_t *를 WCHAR *로 변환

  5. 5

    호환되지 않는 유형 'void (^ __ strong) (int, const char *, int)'에서 'void (*) (int, const char *, int)'에 할당

  6. 6

    "const char **"유형의 인수가 "const char *"유형의 매개 변수와 호환되지 않습니다.

  7. 7

    오류 : 피연산자 유형이 호환되지 않습니다 ( "int"및 "const char *") C ++

  8. 8

    인수 1을 'wchar_t [5]'에서 'const char *로 변환 할 수없는 win32 atoi 문제

  9. 9

    인수 1을 'ATL :: CStringT <wchar_t, ATL :: StrTraitATL <wchar_t, ATL :: ChTraitsCRT <wchar_t >>>'에서 'const char *'로 변환 할 수 없습니다.

  10. 10

    C ++에서 문자 비교- "char"유형의 인수가 "const char * 유형의 매개 변수와 호환되지 않습니다.

  11. 11

    LOWORD (wParam)을 const wchar_t *로 변환

  12. 12

    문자열 매개 변수 const char * 및 const wchar_t *

  13. 13

    const char * 반환 유형

  14. 14

    IntelliSense : "_TCHAR *"유형의 인수가 "const char *"유형의 매개 변수와 호환되지 않습니다.

  15. 15

    'const char *'가 필요하지만 C에서 인수는 'char **'유형입니다.

  16. 16

    VISUAL STUDIO에서 오류 발생 : 오류 C2664 : '_chmod': 매개 변수 1을 'wchar_t [260]'에서 'const char *'로 변환 할 수 없습니다.

  17. 17

    Objective-c : 반환 유형 __strong const char *는 무엇을 의미합니까?

  18. 18

    MSVC (VS2015)에서 "C와 호환되지 않는"것으로 간주되는`char * const` 필드

  19. 19

    비 Objective-C 포인터 유형 'const UInt8 *'(일명 'const unsigned char *')을 'NSData *'로 캐스트하는 것은 ARC에서 허용되지 않습니다.

  20. 20

    사용중인 데이터 유형에 문제가 있습니까? (const char *의 인수는 LPCTSTR 유형의 매개 변수와 호환되지 않습니다.)

  21. 21

    char * 및 wchar_t * 유형의 C- 문자열 비교

  22. 22

    const char []이 항상 const char *로 변환되는 이유는 무엇입니까?

  23. 23

    System :: String ^에서 const wchar_t로 문자열 변환 *

  24. 24

    이진 '연산자 +'에 'const char *'및 'const char [2]'유형의 유효하지 않은 피연산자

  25. 25

    이진 'operator +에 대한'const char [8] '및'const char * '유형의 유효하지 않은 피연산자

  26. 26

    (const char *) ++ 또는 (const char) ++?

  27. 27

    컴파일 시간에 유형이 char 또는 wchar_t인지 확인하십시오.

  28. 28

    "상태 오류 (활성) E0513"const wchar_t * "유형의 값을"wchar_t * "유형의 엔티티에 할당 할 수 없음"수정 방법

  29. 29

    fopen 호환되지 않는 유형 char (*) [9] 대신 C에서 char (*)

뜨겁다태그

보관