C++:编译矢量模板时出现段错误 class
C++: Segfault when compiling vector template class
我正在学习 C++,正在学习和练习创建自定义矢量模板 class,它看起来像
template<class T> class Vector
{
private:
std::vector<T> mData; // data stored in vector
int mSize; // size of vector
public:
// Constructor
Vector(int size)
{
assert(size > 0);
mSize = size;
//std::vector<T> mData;
mData.resize(mSize);
for (int i = 0; i < mSize; i++)
{
//mData.push_back(0);
mData[i] = 0;
}
}
// Get/set values
T& operator[](int i)
{
assert(i >= 0 && i < mSize);
return mData[i];
}
T const& operator[] (int i)const
{
assert(i >= 0 && i < mSize);
return mData[i];
}
...
}
我正在尝试通过执行以下操作来重载一元 - 运算符:
public:
Vector operator-() const
{
Vector v(mSize);
for (int i = 0; i < mSize; i++)
{
v[i] = 0 - mData[i];
}
return v;
}
但这会在编译时产生段错误(没有进一步解释)。我在模板中有多个其他类似的功能似乎有效。在矩阵 class 的另一个模板中,我还有:
public:
Matrix operator-() const // unary -
{
Matrix mat(mNumRows, mNumCols);
for (int i = 0; i < mNumRows; i++)
{
for (int j = 0; j < mNumCols; j++)
{
mat(i,j) = -mData[i*mNumCols + j];
}
}
return mat;
}
这不会产生任何错误。我对内存问题还不是很熟悉。整个语法是否错误,我只是幸运矩阵函数没有产生错误?
错误不是在编译期间而是 运行
我正在学习 C++,正在学习和练习创建自定义矢量模板 class,它看起来像
template<class T> class Vector
{
private:
std::vector<T> mData; // data stored in vector
int mSize; // size of vector
public:
// Constructor
Vector(int size)
{
assert(size > 0);
mSize = size;
//std::vector<T> mData;
mData.resize(mSize);
for (int i = 0; i < mSize; i++)
{
//mData.push_back(0);
mData[i] = 0;
}
}
// Get/set values
T& operator[](int i)
{
assert(i >= 0 && i < mSize);
return mData[i];
}
T const& operator[] (int i)const
{
assert(i >= 0 && i < mSize);
return mData[i];
}
...
}
我正在尝试通过执行以下操作来重载一元 - 运算符:
public:
Vector operator-() const
{
Vector v(mSize);
for (int i = 0; i < mSize; i++)
{
v[i] = 0 - mData[i];
}
return v;
}
但这会在编译时产生段错误(没有进一步解释)。我在模板中有多个其他类似的功能似乎有效。在矩阵 class 的另一个模板中,我还有:
public:
Matrix operator-() const // unary -
{
Matrix mat(mNumRows, mNumCols);
for (int i = 0; i < mNumRows; i++)
{
for (int j = 0; j < mNumCols; j++)
{
mat(i,j) = -mData[i*mNumCols + j];
}
}
return mat;
}
这不会产生任何错误。我对内存问题还不是很熟悉。整个语法是否错误,我只是幸运矩阵函数没有产生错误?
错误不是在编译期间而是 运行