使用模板类时出现内部编译错误

internal compiling error when using template class

本文关键字:内部 编译 错误      更新时间:2023-10-16

>我正在尝试将项目从VS2008迁移到VS2013,该项目在VS2008中编译和工作,不幸的是,在使用VS2013编译相同的代码时,我突然收到"编译器中发生了内部错误"。尝试调用模板类的方法时发生错误

void func(const CMatrix<CSegment>& segments) const
{
    int row, col;
    row = segments.NumOfRows(); //error points to here
    col = segments.NumOfColumns(); // if I remove the above line then the error points to here
}

CMatrix的定义如下:

class CBaseMatrix
{
public:
    CBaseMatrix() {};
    virtual ~CBaseMatrix() {};
    virtual void Resize(const int row, const int col) = 0;
    virtual inline int Size()   const = 0;
    virtual inline int NumOfColumns() const = 0;
    virtual inline int NumOfRows() const = 0;
};

template <class T> 
class CMatrix : public CBaseMatrix
{   
public:
    CMatrix() : 
    m_rawBuff(0),
    m_rawBuffSize(0), 
    m_columns(0), 
    m_rows(0), 
    m_data(0) 
    {};
CMatrix(const CMatrix& matrix):
{
    *this = matrix;
};
    inline int NumOfColumns()   const {return(m_columns);};
    inline int NumOfRows()  const {return(m_rows);};
    inline int Size()   const {return(m_data.size());};
private:
    int m_columns;
    int m_rows;
    vector<T> m_data;
    T*  m_rawBuff ;
    int m_rawBuffSize ;
};

我找不到代码的任何问题,而且错误本身的信息量不是很大。

我希望我错过了一些东西,或者有人遇到了类似的问题并知道如何解决它。

谢谢。

我不知道

代码在任何编译器下如何工作,如下所示:

void func(const CMatrix<CSegment>& segment) const
{
    int row, col;
    row = segments.NumOfRows(); //error points to here
    col = segments.NumOfColumns(); 
}
传入一个名为段

的变量,代码尝试访问一个名为段s

尝试将参数名称更改为段。

嗯,我发现了问题所在,请注意,在原始代码中:

CMatrix(const CMatrix& matrix):
{
    *this = matrix;
};

我在构造函数后面有":",但初始化列表为空,不知何故,这导致编译器崩溃了。

删除它们后:

CMatrix(const CMatrix& matrix)
{
    *this = matrix;
};

一切正常!

请注意,我将错误提交给Microsoft,希望他们会在下一次更新中解决这个问题,但与此同时,我将解决方案留在这里,以防其他人遇到此问题。