linux 开发异常错误记录

  •  error: using typedef-name `T' after `class'

template< typename T>
class Factory
{
    friend class T;
};

class Foo
{

};

int main()
{
    Factory< Foo > f;

    return 0;
}

按照 http://stackoverflow.com/questions/6321191/using-friend-in-templates
提供的解决方案是:

使用间接方式:

template< typename T >
class MakeFriend
{
public:
    typedef T Type; 
};


template< typename T >
class Factory
{
public:
    friend class MakeFriend< T >::Type ;
};

class Foo
{

};

int main()
{
    Factory< Foo > f;

    return 0;
}

 

  • error: expected `;' before "m_item"

  • error: ‘m_item’ was not declared in this scope

template< typename T>
class SubTemplate
{
public:
    typedef T Type;
};


template< typename T>
class Wrapper
{
    SubTemplate< T >::Type m_item ;
};


class Foo
{
};

int main()
{
    Wrapper< Foo> a;


    return 0;
}
  • 从属属性:在模板中依赖于一个template参数(也就是尖括号中typename后面的T啦)的属性(注意,是属性而不是成员哦)。
  • 在使用从属属性的时候,应当在前面加上一个typename关键字,否则就会引发潜在的问题,如下所示。如果在T::someProperty前没有typename关键字,也许编译器会把声明指针用的*认为是用作乘法的乘号。
template <typename T>
class C{
public:
    void f(){
        typename T::someProperty* x;
    };
};

修改后将如:

template< typename T>
class SubTemplate
{
public:
    typedef T Type;
};


template< typename T>
class Wrapper
{
    typename SubTemplate< T >::Type m_item ; // modify this line
};


class Foo
{
};

int main()
{
    Wrapper< Foo> a;


    return 0;
}

 

  •  lua 栈溢出问题

程序老是自动访问冲突到某一行, 具体调用过程是 C 调用 lua 在调用 C ,在后面的 C 函数里有如

int CreateMonsters( lua_State* L)
{
    for( int row = 0; ...)
    {
        for( int col = 0; ...)
        {
            int mapid = GetMapID( L);
            ...
        }
    }
    
}

经常在调用 CreateMonsters() 函数的位置, 例如 

{

     ...

     CreateMonsters();

     ...

}

 

报访问冲突的错误, 即便在CreateMonsters() 内部加上通篇的 try-catch 也无法扑捉到, 函数尾部能够访问到, 就是推出函数时出错;按照以往经验估计是 栈溢出的问题, 才会如此的“粗暴”, 折腾了一番后, 发现时 int GetMapID( lua_State* L) 的问题:

int GetMapID( lua_State* L)
{
    lua_pushnumber( L, m_mapid);

   return 1;
}

row * col 次插入如此多的数据到 栈里, 并且是 多次的 C、lua嵌套调用, 有没有相应合理的 lua_pop( L, n)操作,当然导致某个时刻 从 C 到 lua 异常啦; 当然, 这也是错误使用 该函数, 该函数是给 lua 调用的, 并非给 C。

 

转载于:https://www.cnblogs.com/Wilson-Loo/archive/2013/04/15/3021326.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值