我试图在windows7和Visual Studio2013中编译VTK5.10.1(vs2012 C ++编译器,所以我猜有人可能会在2012年遇到同样的问题)
修复了一些小bug和一些丢失的头文件 关注VTK wiki的tuitols。在最后一步:
我收到两个错误
#define VTKOSTREAM_OPERATOR(type)\ vtkOStreamWrapper& vtkOStreamWrapper :: operator<< (a)) {this-> ostr<<一个;返回*这个; }
VTKOSTREAM_OPERATOR(ostream&);
2.binary' ==' :找不到哪个运算符采用了类型' std :: basic_istream>'的左手操作数。 (或者没有可接受的转换)
if ( this->IFile->read(result, 80) == 0)
此处源代码托盘在std :: basic_istream>之间运行operator ==和int
但是在std :: istream中,operator ==不是覆盖。
等待帮助。 感谢
答案 0 :(得分:3)
在Win 8.1 + VS2013x64中构建VTK 5.8.0时,我遇到了完全相同的错误。
这是我的解决方案:
替换宏后,错误转到operator<<
的定义。编译器需要找到与
this->ostr << a;
其中this->ostr
和a
的类型均为std::ostream &
。所以我写了一个简单的测试代码来检查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;
}
自代码
if ( this->IFile->read(result, 80) == 0)
实际上是一种C ++ 11方法来确定ifstream->read()
是否成功(ostream
可以自动转换为bool
),VS2013不支持。我将所有这些都改为标准形式:
if ( this->IFile->read(result, 80).fail())