C++ 代码可以在MSVC上编译,但不能在GCC上编译

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是否依赖于剩余的?我试图将您的示例简化为一

我是GCC新手,正在尝试将代码移植到Linux上,Linux用MSVC编译后可以。 下面的代码(可以复制和编译的小程序)产生错误:

“没有依赖于模板参数的'num_obj_inc'参数, 因此,“num_obj_inc”的声明必须可用[-fppermissive]。”

编译错误的原因是什么?

您需要使用:

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();