2014-04-15 3 views
3

내가 Windows7의에서 VTK5.10.1 및 Visual Studio2013 컴파일하기 위해 노력하고있어 (vs2012의 C++ 컴파일러, 그래서 누군가가 2012 년 같은 질문에 직면 할 수 추측) 수정 후VTK VisualStudio2013 컴파일 오류

일부 작은 버그를 일부 누락 헤드 파일 VTK 위키의 튜토리얼을 따르십시오. 마지막 단계에서 :

나는이 개 오류

  1. C2678 가지고 : 바이너리를 '<은 <'에는 운전자 유형의 왼쪽 피연산자 소요되는 '표준 : : ostream에'를 찾을 수 없습니다 (또는이 없다 허용 가능한 변환)

#DEFINE의 VTKOSTREAM_OPERATOR (타입) \ vtkOStreamWrapper & vtkOStreamWrapper :: 연산자 < < \ (A 타입) {this-> ostr < <; return * this; }

VTKOSTREAM_OPERATOR(ostream&); 

2.binary '=='없음 연산자 '표준 : basic_istream보다는>'(또는 허용 가능한 전환 없음)

타입의 왼쪽 피연산자를 취하는 발견 여기

if (this->IFile->read(result, 80) == 0) 
소스 코드 트레이 표준 : basic_istream보다는 사이 == 연산자를 실행>과

에서 INT 그러나 표준을 int로 :: 조작자 IStream을 == 아니다 보수.

도움을 기다리고 있습니다. 감사합니다.

+0

VTK 5.10.1 컴파일을 및 Visual Studio 2012에서 나를 위해 내가 비주얼 스튜디오에 대한 액세스 권한이없는 (내가 사용하는 부품 않도록에서 잘) 잘 실행 : I 표준 형태로 모두 변경 2013 프로입니다. 아직 테스트하지 않았습니다. VS12 (Visual Studio 2013) 용으로 생성 할 때 V110 도구 세트를 사용해 보셨습니까? – drescherjm

+0

두 번째 버그를 수정했습니다. std :: basic_istream은 std : base_istream에서 상속 받고 override 연산자를가집니다! I/O 기능이 오류없이 실행 중임을 확인합니다. –

+0

@drescherjm 감사합니다. 툴 세트를 변경하고 싶지만 vs2013의 경우 V120과 v2010의 경우 v100의 두 가지 선택 항목 만 있습니다 ... 왜 내가 ' t use v110 –

답변

3

Win 8.1 + VS2013x64에서 VTK 5.8.0을 빌드 할 때와 완전히 동일한 오류가 발생했습니다.

  1. 매크로를 대체 한 후 오류가 operator<<의 정의로 이동 :

    여기 내 솔루션입니다. 컴파일러는 this->ostra의 유형이 모두 std::ostream &을 어디에

    this->ostr << a; 
    

    일치하는 선언을 찾아야합니다. 그래서 나는 VS 컴파일러를 검사하기위한 간단한 테스트 코드를 작성했다.

    #include <iostream> 
    #include <sstream> 
    
    void test(std::ostream &a, std::ostream &b) { 
        a << b; 
    } 
    
    int main(int argc, char *argv[]) 
    { 
        std::ostringstream a,b; 
        test(a,b); 
        std::cout << a << std::endl; 
        return 0; 
    } 
    

    이 GCC4.7에 올바른 것으로 밝혀졌습니다. 그리고 ostream은 포인터의 일종 (자동 주소가 아니라 자동으로 캐스트되어 주소를 출력 함)이 될 것 같습니다. 그러나 VS2013은 저에게 VTK 구축과 같은 오류를줍니다!그래서, vtkOStreamWrapper::operator<< (ostream &a)의 정의를 다시 만들어 보자 : 코드 때문에

    //VTKOSTREAM_OPERATOR(ostream&); 
    vtkOStreamWrapper& vtkOStreamWrapper::operator << (ostream& a) { 
        this->ostr << (void *)&a; 
        return *this; 
    } 
    
  2. if (this->IFile->read(result, 80) == 0) 
    

    실제로 ifstream->read() suceeds 여부를 결정하는 C++ (11) 방법은 (a ostream은 자동 될 수 있습니다 VS2013에서 지원하지 않는 bool으로 캐스트).

    if (this->IFile->read(result, 80).fail()) 
    
+0

고마워, 너의 방법으로 해결 했어 ~ –

+0

여기에 적용된 수정 사항을 얻을 수있다 : https://github.com/bilke/VTK –

+0

일부 C2039 오류를 해결하려면'#include '을 각각의 파일. – Joma