c++ - VTK VisualStudio2013编译错误

标签 c++ visual-studio-2012 vtk

我正在尝试在windows7和Visual Studio2013中编译VTK5.10.1(vs2012 C++编译器,所以我猜有人可能在2012年面临同样的问题)

修复了一些小错误和一些丢失的头文件之后 遵循 VTK wiki 的 tuitol。最后一步:

我有两个错误

  1. C2678:二进制“<<”:找不到采用“std::ostream”类型左侧操作数的运算符(或者没有可接受的转换)

#define VTKOSTREAM_OPERATOR(type) \ vtkOStreamWrapper& vtkOStreamWrapper::operator << (type a) \ { this->ostr << a; return *this; }

VTKOSTREAM_OPERATOR(ostream&);

2.binary '==':找不到采用'std::basic_istream>'类型的左操作数的运算符(或者没有可接受的转换)

 if ( this->IFile->read(result, 80) == 0)

这里是在std::basic_istream>和int之间运行operator==的源代码托盘

但是 int std::istream 运算符 == 不会被覆盖。

等待帮助。 谢谢

最佳答案

在 Win 8.1 + VS2013x64 中构建 VTK 5.8.0 时,我遇到了完全相同的错误。

这是我的解决方案:

  1. 替换宏后,错误转到 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;
    }
    
  2. 由于代码

    if ( this->IFile->read(result, 80) == 0)
    

    实际上是C++11判断是否ifstream->read()的方法是否成功( ostream 可以自动转换为 bool ),VS2013 不支持。我将它们全部更改为标准形式:

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

关于c++ - VTK VisualStudio2013编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23090220/

相关文章:

c++/c struct array 成对求和

c++ - 使用较旧的 C++ 实现在编译时检查一些编译时定义

C# ToolStrip 插入标准菜单标准图标位置

c# - 为什么从标准类型继承时会收到警告 CA2229(实现序列化构造函数)

c# - 自动完成文本框的文件夹条目

python - 使用 Python 和 wxPython 的 3D/4D 图形?

c++ - 为什么无符号短(乘)无符号短转换为有符号整数?

c++ - 100% 确定性的快速素数测试?

c++ - 使用 VTK 的 3D 等高线图 C++ 示例?

c++ - 如何在 3D 场景中使用和设置轴