首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个c++小程序出现了有关问题,请大家帮一下

2012-06-08 
一个c++小程序出现了问题,请大家帮一下。#includeiostreamusing namespace stdclass TSet{private:int *

一个c++小程序出现了问题,请大家帮一下。
#include<iostream>
using namespace std;
class TSet
{
private:
  int *m_piNumber;
  int m_iIndex;
  void sort_insert(int iNumber);
public:
TSet();
  TSet(int iNum);
  ~TSet();
  void insert(int iNumber);
  int get(int iIndex);
  int operator[](int iIndex);
  void print();
  int count();
  bool IsExist(int iNumber);
void Show(TSet p);
  friend TSet Mix(TSet p1,TSet p2,TSet p3);
friend TSet Union(TSet p1,TSet p2,TSet p3);
};
//function.cpp
#include"function.h"  

TSet::TSet()
{
m_iIndex = 0;
  m_piNumber =NULL;
}

TSet::TSet(int iNum)
{
  m_iIndex = iNum;
  m_piNumber = new int[iNum];
}

TSet::~TSet()
{
  if(m_piNumber)
  delete []m_piNumber;
}

void TSet::sort_insert(int iNumber)
{
  for(int i = 0; i < m_iIndex; i++)
  {
  if(m_piNumber[i] >= iNumber)
  {
  for(int j = m_iIndex; j > i; j--)
  {
  m_piNumber[j] = m_piNumber[j-1];
  }
  m_piNumber[i] = iNumber;
  m_iIndex++;
  return;
  }
}
  m_piNumber[m_iIndex++] = iNumber;
}

bool TSet::IsExist(int iNumber)
{
  int mid,top,bot;
  bool find = false;
  top=0;
  bot=m_iIndex-1;
  find=0;
  do
  {
  mid=(top+bot)/2;
  if(iNumber==m_piNumber[mid])
  {
  find=true;
  }
  else if(iNumber > m_piNumber[mid])
  top=mid+1;
  else  
  bot = mid -1;
  } while((top<=bot) && (find==0));
  return find;
}

int TSet::get(int iIndex)
{
  if(iIndex < 0 || iIndex>=m_iIndex)
  return 0;
  return m_piNumber[iIndex];
}

int TSet::operator[](int iIndex)
{
  if(iIndex < 0 || iIndex>=m_iIndex)
  return 0;
  return m_piNumber[iIndex];
}

void TSet::print()
{
  for(int i = 0; i < m_iIndex; i++)
  {
  cout << m_piNumber[i] << endl;
  }
}

void TSet::insert(int iNumber)
{
  if(IsExist(iNumber))
  return;
  else
  sort_insert(iNumber);
}

int TSet::count()
{
  return m_iIndex;
}

void TSet::Show (TSet p)
{
for(int i=1;i<=p.m_iIndex;i++)
cout << p[i] << endl;
}

TSet Mix(TSet p1,TSet p2,TSet p3)
{
  int cnt = p2.count();
  for(int i = 0 ; i < cnt; i++)
  {
  if(p1.IsExist(p2[i]))
  p3.insert(p2[i]);
  }
return p3;
}

TSet Union(TSet p1,TSet p2,TSet p3)
{  
  int cnt = p2.count();
  for(int i = 0 ; i < cnt; i++)
  {
  if(!p1.IsExist(p2[i]))
  p3.insert(p2[i]);
  }
  cnt =p1.count();
  for(int j= 0; j< cnt; j++)
  {
  p3.insert(p1[j]);
  }
return p3;
}
//main.cpp
#include<iostream>
#include"function.h"
using namespace std;

int main()
{  
  TSet p1,p2,p3,p4;
int m=5,n=3;
p1(m);
p2(n);
for(int i=0;i<=m;i++)
{
p1[i]=i+1;
}
for(int j=0;j<=n;j++)
{
p2[j]=j+1;
}
Mix(p1,p2,p3);
Show(p3);
Union(p1,p2,p4);
Show(p4);
return 0;
}

刚才很谢谢有位好心人帮我纠正了function.cpp中的错误,这个函数的main函数我编译时老出错,请大侠指正一下,谢谢!

------解决方案--------------------


探讨
刚才很谢谢有位好心人帮我纠正了function.cpp中的错误,这个函数的main函数我编译时老出错,请大侠指正一下,谢谢!

[解决办法]
TSet p1,p2,p3,p4;
int m=5,n=3;
p1(m);
p2(n);

1、指针的定义
2、内存的动态分配
3、还有一些函数的调用,其输入的参数问题
TSet p1,p2,p3,p4;
int m=5,n=3;
p1(m);
p2(n);
//我理解为下面意思,不知道对不对
TSet* p1;
TSet* p2;
TSet* p3;
TSet* p4;
int m=5,n=3;
p1 = new TSet(m);
p2 = new TSet(n);
p3 = new TSet();
p4 = new TSet();

[解决办法]
楼主的main函数中有3类问题:
C/C++ code
int main(){  int main(){      TSet /*p1,p2,*/p3,p4;    // 吧p1和p2注释掉,以便在下面进行定义    int m=5,n=3;    //p1(m);                        问题1:定义对象的时候可不能这么写,    //p2(n);        // 需要这么写:        TSet p1(m);        TSet p2(n);    for(int i=0;i<=m;i++)    {        p1[i]=i+1;                    // 问题2  TSet中的[]重载是返回其中的数值,也就是说得到一个rvalue,    }                                           // 因此这种赋值必然导致失败。解决办法,要么重写[],要么用别的方法    for(int j=0;j<=n;j++)    {        p2[j]=j+1;                  // 同问题2    }    Mix(p1,p2,p3);    // Show(p3);                          // 问题3: Show是成员函数,它必须要有对象或者对象指针来调用的        // 应该写成:        p3.Show();                             // 好好考虑一下Show函数中的参数是否有必要?    Union(p1,p2,p4);    Show(p4);                              // 通问题3    return 0;} 

热点排行