C++ 代码可以在MSVC上编译,但不能在GCC上编译
我是GCC新手,正在尝试将代码移植到Linux上,Linux用MSVC编译后可以。 下面的代码(可以复制和编译的小程序)产生错误: “没有依赖于模板参数的'num_obj_inc'参数, 因此,“num_obj_inc”的声明必须可用[-fppermissive]。” 编译错误的原因是什么?您需要使用:C++ 代码可以在MSVC上编译,但不能在GCC上编译,c++,visual-c++,gcc,msvcrt,C++,Visual C++,Gcc,Msvcrt,我是GCC新手,正在尝试将代码移植到Linux上,Linux用MSVC编译后可以。 下面的代码(可以复制和编译的小程序)产生错误: “没有依赖于模板参数的'num_obj_inc'参数, 因此,“num_obj_inc”的声明必须可用[-fppermissive]。” 编译错误的原因是什么?您需要使用: this->num_obj_inc(); 有关详细说明,请参阅。您没有从代码中删除\u SPTRDBG无意义的内容,有什么特殊原因吗?或者bug是否依赖于剩余的?我试图将您的示例简化为一
this->num_obj_inc();
有关详细说明,请参阅。您没有从代码中删除
\u SPTRDBG
无意义的内容,有什么特殊原因吗?或者bug是否依赖于剩余的?我试图将您的示例简化为一个较小的测试,您可以在中看到。如果仍然存在错误,您应该使用该代码更新您的问题。您是否尝试将-fppermissive
添加到编译器标志中?@sharth-我不确定_SPTRDBG宏是否与错误无关(模板扩展和预处理都发生在编译之前)。无论如何,你的链接提供了答案。谢谢。要么你或者@sharth应该提供答案……模板扩展绝对是编译的一部分。。。
struct objCounter
{
void num_obj_inc(){}
void num_obj_dec(){}
};
class SPtr
: public objCounter
{
public:
SPtr(int *p)
//:p(_p)
{
if ( p ) {
SPTRDBG( num_obj_inc() )
}
}
};
this->num_obj_inc();