저는 여기서 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.
}
};
open
main 에서 함수 호출 .
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] 삭제
몇 마디 만하겠습니다