(OSG3.4.0)编译osgShadow项目时,ViewDependentShadowMap编译失败

时间:2021-11-03 22:52:12
E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1722): warning C4003: “min”宏的实参不足
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1722): error C2062: 意外的类型“unsigned int”
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1722): error C2334: “:”的前面有意外标记;跳过明显的函数体
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1734): error C2143: 语法错误 : 缺少“)”(在“}”的前面)
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1734): error C2143: 语法错误 : 缺少“}”(在“)”的前面)
在WIN7+VS2012环境下,使用32位平台,编译osgShadow项目时,ViewDependentShadowMap编译失败,提示:
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1734): error C2059: 语法错误:“)”
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1734): error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1734): error C2238: 意外的标记位于“;”之前
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1736): error C2628: “ConvexHull”后面接“double”是非法的(是否忘记了“;”?)
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1736): warning C4003: “max”宏的实参不足
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1736): error C2143: 语法错误 : 缺少“;”(在“<L_TYPE_raw>”的前面)
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1736): error C2059: 语法错误:“<L_TYPE_raw>”
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1736): error C2059: 语法错误:“)”
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1737): error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1737): error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
1>E:\osg\OpenSceneGraph-3.4.0\src\osgShadow\ViewDependentShadowMap.cpp(1751): error C2270: “minRatio”: 非成员函数上不允许修饰符
...
问题代码为:
double min(unsigned int index) const
    {
        double m = DBL_MAX;
        for(Edges::const_iterator itr = _edges.begin();
            itr != _edges.end();
            ++itr)
        {
            const Edge& edge = *itr;
            if (edge.first[index]<m) m = edge.first[index];
            if (edge.second[index]<m) m = edge.second[index];
        }
        return m;
    }

    double max(unsigned int index) const
    {
        double m = -DBL_MAX;
        for(Edges::const_iterator itr = _edges.begin();
            itr != _edges.end();
            ++itr)
        {
            const Edge& edge = *itr;
            if (edge.first[index]>m) m = edge.first[index];
            if (edge.second[index]>m) m = edge.second[index];
        }
        return m;
    }
该怎么处理呢,谢谢大家。

2 个解决方案

#1


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

#2


参考另外一个帖子得到了解决方法,使用预处理器来屏蔽min和max:
项目属性 ——> C/C++ ——> 预处理器 ——> 预处理器定义 ——>加入NOMINMAX,
具体见http://blog.csdn.net/wangshubo1989/article/details/50597178。

#1


偶遇到类似问题都是用
“每次用/*...*/注释掉不同部分再重新编译,直到定位到具体语法出错的位置。”
的方法解决的。

#2


参考另外一个帖子得到了解决方法,使用预处理器来屏蔽min和max:
项目属性 ——> C/C++ ——> 预处理器 ——> 预处理器定义 ——>加入NOMINMAX,
具体见http://blog.csdn.net/wangshubo1989/article/details/50597178。