gpt4 book ai didi

c++ - GNU C++ 编译器中的段错误

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:57 24 4
gpt4 key购买 nike

我试图让这段代码在 GNU C++ 编译器 (g++) 中编译,但它似乎无法正常工作。我用过 Vis Studio 和 Code::Blocks,效果很好。我知道编译器在某些方面有所不同,想知道是否有人可以帮助我找到我的错误。

#include <iostream>
using namespace std;

template <class T>
class Array
{
private:
T *m_array;
int m_size;
public:
Array();
Array(Array& other);
Array(int size);
~Array();
void setValue(int index, T val);
T getValue(int index);
int getSize();
Array &operator=(Array &other);
Array &operator+(Array &other);
Array &operator+(T val);
inline friend ostream &operator<<(ostream &other, Array<T> arr)
{
for (int i = 0; i < arr.getSize(); i++)
{
other << arr.getValue(i) << " ";
}
}
};

template<class T>
Array<T>::Array()
{
m_array = NULL;
m_size = 0;
}
template<class T>
Array<T>::Array(int size)
{
m_size = size;
m_array = new T[size];
}
template<class T>
Array<T>::Array(Array& other)
{
*this = other;
}
template<class T>
Array<T>::~Array()
{
delete[] m_array;
}
template<class T>
void Array<T>::setValue( int index, T val )
{
m_array[index] = val;
}
template<class T>
T Array<T>::getValue( int index )
{
return m_array[index];
}
template<class T>
Array<T> &Array<T>::operator=( Array& other )
{
if (m_array != NULL)
delete[] m_array;

m_size = other.getSize();

m_array = new T[m_size];

for (int i = 0; i < other.getSize(); i++)
{
m_array[i] = other.getValue(i);
}

return *this;
}
template<class T>
Array<T> &Array<T>::operator+( Array &other )
{
for (int i = 0; i < m_size; i++)
{
m_array[i] += other.getValue(i);
}

return *this;
}
template<class T>
Array<T> &Array<T>::operator+( T val )
{
for (int i = 0; i < m_size; i++)
{
m_array[i] += val;
}

return *this;
}
template<class T>
int Array<T>::getSize()
{
return m_size;
}

最佳答案

1) 你真的应该了解 const-correctness

2) 这段代码看起来很可疑

template<class T>
Array<T> &Array<T>::operator+( Array &other )
{
for (int i = 0; i < m_size; i++)
{
m_array[i] += other.getValue(i);
}

return *this;
}

如果 other 数组的元素较少怎么办?您将有未定义的行为(可能包括段错误)

3) 为什么使用 m_array[i] += other.getValue(i);?因为 m_array 是私有(private)的?请记住,访问是在类级别而不是对象级别定义的,因此 m_array[i] = other.m_arry[i] 也可以工作。

4) 我建议你应该阅读a good C++ book

5) 只有当您发布使用您的数组类的代码时,才能确定段错误的确切原因。

关于c++ - GNU C++ 编译器中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13366053/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com