求助 关于静态指针
代码如下:在三处测试处指针的值都不一样 测试1和3的值要相同,怎么办才好?如何将m_pData设成静态指针?
#include <iostream>
using namespace std;
template<class T>
class myArray
{
private:
int m_nTotalSize;
int m_nValidSize;
T *m_pData;
public:
myArray(int nSize=3)
{
m_pData=new T[nSize];
m_nTotalSize=nSize;
m_nValidSize=0;
}
void add(T value);
int getSize() const
{
return m_nValidSize;
}
int getTotalSize() const
{
return m_nTotalSize;
}
T getvalue(int pos) const
{
return m_pData[pos];
}
virtual ~myArray()
{
if(m_pData!=NULL)
{
delete [] m_pData;
m_pData=NULL;
}
}
void traverse() const;
};
template<class T>
void myArray<T>::traverse() const
{
cout<<m_pData<<endl;//[color=#FF0000][/color]测试1
for(int i=0;i<m_nValidSize;i++) std::cout<<m_pData[i]<<"\t";
}
template<class T>
void myArray<T>::add(T value)
{
if(m_nValidSize!=m_nTotalSize)
m_pData[m_nValidSize++]=value;
else
{
T *m_temp=new T[m_nTotalSize];
for (int i=0;i<m_nValidSize;i++)
m_temp[i]=m_pData[i];
cout<<m_pData<<endl;[color=#FF0000][/color]测试2
delete []m_pData;
m_nTotalSize*=2;
T *m_pData=new T[m_nTotalSize];
for(int i=0;i<m_nValidSize;i++)
m_pData[i]=m_temp[i];
delete []m_temp;
m_pData[m_nValidSize++]=value;
cout<<m_pData<<endl;//[color=#FF0000][/color]测试3
}
}
int main(void)
{
myArray<int> arr;
arr.add(4);
arr.add(6);
arr.add(7);
arr.add(5);
arr.traverse();
return 0;
}
[解决办法]
不要在函数里面再定义局部变量m_pData,否则会屏蔽掉类的成员变量
给你改好了
- C/C++ code
#include <iostream>using namespace std;template<class T>class myArray{private: int m_nTotalSize; int m_nValidSize; T *m_pData; public: myArray(int nSize=3) { m_pData=new T[nSize]; m_nTotalSize=nSize; m_nValidSize=0; } void add(T value); int getSize() const { return m_nValidSize; } int getTotalSize() const { return m_nTotalSize; } T getvalue(int pos) const { return m_pData[pos]; } virtual ~myArray() { if(m_pData!=NULL) { delete [] m_pData; m_pData=NULL; } } void traverse() const;};template<class T>void myArray<T>::traverse() const{ cout<<m_pData<<endl;//[color=#FF0000][/color]测试1 for(int i=0;i<m_nValidSize;i++) std::cout<<m_pData[i]<<"\t";}template<class T>void myArray<T>::add(T value){ if(m_nValidSize!=m_nTotalSize) m_pData[m_nValidSize++]=value; else { T *m_temp=new T[m_nTotalSize]; for (int i=0;i<m_nValidSize;i++) m_temp[i]=m_pData[i]; cout<<m_pData<<endl; // [color=#FF0000][/color]测试2 delete []m_pData; m_nTotalSize*=2; //T *m_pData=new T[m_nTotalSize]; //这里需要修改对象的m_pData,不是定义一个局部变量,否则无法修改类的m_pData m_pData=new T[m_nTotalSize]; for(int i=0;i<m_nValidSize;i++) m_pData[i]=m_temp[i]; delete []m_temp; m_pData[m_nValidSize++]=value; cout<<m_pData<<endl;//[color=#FF0000][/color]测试3 }}int main(void){ myArray<int> arr; arr.add(4); arr.add(6); arr.add(7); arr.add(5); arr.traverse(); return 0;}