[英]internal compiling error when using template class
我正在尝试将项目从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,并希望他们会在下次更新时处理此问题,但与此同时,我将解决方案保留在此处,以防其他人遇到此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.