에러모음2020. 12. 28. 18:41

내 경우엔 빌드 중 에러가 뜨면서 Temp/StagingArea/Data 경로에서 발생했는데

빌드과정에서 생성되는 파일이라 StagingArea를 그냥 지웠다.

 

Posted by 멜데스
에러모음/VS 에러2019. 8. 10. 20:08

VS2015에서 작성한 코드를 VS2017로 가져왔다.

문제가 하나 있었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template < class _Type >
class Shared_Ptr 
{
    typedef Shared_Ptr<_Type> ThisType;
 
public:
    Shared_Ptr(void) : m_holder(MDS_NULL)
    {
    }
 
    template<class _T, class _Deleter >
    Shared_Ptr(_T* ptr, _Deleter deleter) : m_holder(MDS_NULL)
    {
        typedef DETAIL::PtrDeleterHolder<_T, _Deleter, mds::Memory::Allocator<_T> > HolderType;
        typedef mds::Memory::Allocator<HolderType> HolderAllocator;
        HolderAllocator allocator;
        this->m_holder = allocator.allocate(1);
        new(this->m_holder) HolderType(ptr, deleter);
        this->m_holder->AddRef();
    }
};
 
cs

예시코드는 VS2015에서 작성된 코드이다. 

해당코드를 VS2017에서 빌드할 경우 

error C7510: 'C_Allocator': 종속적 템플릿 이름은 '템플릿' 접두사와 함께 사용해야 합니다.

이런 메시지가 출력된다.

VS2017(세부 버전까지는 모르겠다.)에서 규칙 향상 목적으로 퍼미시브 모드에서 템플릿이라는 접두사를 붙여 명시하도록 변경되었다. 기본 수준에서는 C7510에러를 띄우게끔 적용되어있다.

여러 보안이나 수준 옵션을 건들이는 것보다는 역시 에러 부분을 죄다 바꿔먹는게 좋다. 크게 많지는 않으므로 수정을 했다. MS가 또 친절한게 에러를 뱉으면서 어떻게 하라는지 알려줬다. ('템플릿' 접두사와 함께 사용해야 합니다.)

그냥 '템플릿' 접두사와 함께 사용해야 합니다로 하지말고 'template' 접두사와 함께 사용해야 합니다. 였으면 좀 더 직관적이였을텐데 아쉽네.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
template < class _Type >
class Shared_Ptr 
{
    typedef Shared_Ptr<_Type> ThisType;
 
public:
    Shared_Ptr(void) : m_holder(MDS_NULL)
    {
    }
 
    template<class _T, class _Deleter >
    Shared_Ptr(_T* ptr, _Deleter deleter) : m_holder(MDS_NULL)
    {
        typedef DETAIL::PtrDeleterHolder<_T, _Deleter, mds::Memory::template Allocator<_T> > HolderType;
        typedef mds::Memory::template Allocator<HolderType> HolderAllocator;
        HolderAllocator allocator;
        this->m_holder = allocator.allocate(1);
        new(this->m_holder) HolderType(ptr, deleter);
        this->m_holder->AddRef();
    }
};
 
cs

VS2017 버전으로 수정 후.

Posted by 멜데스
에러모음/VS 에러2018. 4. 26. 15:15

오류

error C3859: PCH에 대한 가상 메모리 범위를 초과했습니다. 명령줄 옵션을 '-Zm128'이상으로 지정하여 다시 컴파일하십시오.

fatal error C1076 컴파일러 한계 : 내부 힙 한계에 도달했습니다. /Zm을 사용하여 한계를 더 높게 지정하십시오.

오류 이유

엔진을 만들다 보니 PCH 파일에 수많은 헤더가 추가 되었다. 작업하다보니 어느샌가 PCH 할당 용량을 초과한 경우다.

그리고 헤더파일을 중복선언과 교차선언시 더 자주 발생한다.

VS 속성 -> 프로젝트 속성 -> C/C++ Command Line에 -Zm'숫자'를 추가해준다.

저 안에 숫자는 컴파일러 출력 메시지에 적힌 수치보다 높은 수치를 할당해주어야 동작한다.

대신 그만큼의 컴파일 타임때 가상메모리 로드만큼 무거워진다.

해결

1. -Zm150 지정


Posted by 멜데스
에러모음/VS 에러2018. 2. 28. 14:49

오류

fatal error C1083: 미리 컴파일된 헤더 파일을 열 수 없습니다. 'debug\precompile.pch': No such file or directory

오류 이유

#include "precompile.hpp" -> PCH 만들 타겟 헤더(사용자가 따로 만듦)

VS 속성 -> 미리컴파일된헤더 -> 미리 컴파일된 헤더 사용(/Yu) <이 경우에는 프로젝트 생성시 미리컴파일된 헤더 사용 옵션을 포함하였을 경우>


해결

1. 단순하게 미리 컴파일된 헤더 만들기(/Yc)로 옵션 변경

2. 파일에서 PCH 만들기 / 사용 -> precompile.hpp

Posted by 멜데스
에러모음/VS 에러2018. 2. 23. 14:35

오류

C2381 'exit': 재정의. '__declspec(noreturn)' 또는 '[[noreturn]]'이 다릅니다. Assimp_Test c:\program files (x86)\windows kits\10\include\10.0.16299.0\ucrt\stdlib.h 51


오류 이유

#include "glut\GL\glut.h"

#include <assimp/cimport.h>

#include <assimp/scene.h>

#include <assimp/postprocess.h>


stdlib.h의 exit가 재정의 되었다. glut.h를 선언한 후 stdlib.h를 선언하면 중복정의 에러로 처리한다.

stdlib.h를 직접 선언하지 않았지만 assimp 내부적으로 stdlib.h를 내포하고 있기에 중복선언으로 처리되었다.



해결

단순하게 assimp 헤더를 먼저 선언한 후 glut를 선언했다.

#include <assimp/cimport.h>

#include <assimp/scene.h>

#include <assimp/postprocess.h>

#include "glut\GL\glut.h"

Posted by 멜데스