模板-图中断点处,85行显示没问题,但94行会报错,为什么?

问题描述

图中断点处,85行显示没问题,但94行会报错,为什么?


#include
#include
#include
using namespace std;

const int DefaultSize = 50;
template
class bitSet
{
public:
bitSet(int sz = DefaultSize);
bitSet(const bitSet& R);
~bitSet(){delete []bitVector;}
void makeEmpty()
{ for (int i = 0; i < vectorSize; i++) bitVector[i] = 0;}
unsigned short getMember(const T x);
void putMember(const T x, unsigned short v);
bool addMember(const T x);
bool delMember(const T x);
bitSet& operator + (const bitSet& R);
bitSet& operator * (const bitSet& R);
bitSet& operator - (const bitSet& R);
bool Contains(const T x);
bool subSet(bitSet& R);

private:
int setSize;
int vectorSize;
unsigned short *bitVector;
};

template
bitSet::bitSet(int sz):setSize(sz)
{
assert(setSize > 0);
vectorSize = (setSize+15)>>4;
bitVector = new unsigned short[vectorSize];
assert(bitVector != NULL);
for(int i=0; i<vectorSize; i++)bitVector[i] = 0;
};

template
bitSet::bitSet(const bitSet& R)
{
setSize = R.setSize;
vectorSize = R.vectorSize;
bitVector = new unsigned short[vectorSize];
assert(bitVector != NULL);
for (int i = 0; i < vectorSize; i++)
bitVector[i] = R.bitVector[i];
};

template
unsigned short bitSet::getMember(const T x)
{ int ad = x/16, id = x%16;
unsigned short elem = bitVector[ad];
return ((elem >>(15-id)) %2);
}

template
void bitSet::putMember(const T x, unsigned short v)
{ int ad = x/16, id = x%16;
unsigned short elem = bitVector[ad];
unsigned short temp = elem>>(15-id); elem=elem<<(id+1);
if (temp%2 == 0 && v == 1) temp = temp+1;
else if (temp%2 == 1 && v == 0) temp = temp - 1;
bitVector[ad] = (temp<<(15-id)) | (elem>>(id+1));
};

template
bool bitSet::addMember(const T x)
{ assert(x >= 0 && x < setSize);
if (getMember(x) == 0)
{ putMember(x,1); return true;}
return false;
};

template
bool bitSet::delMember(const T x)
{ assert(x >= 0 && x < setSize);
if (getMember(x) == 1)
{ putMember(x,0); return true;}
return false;
}

template
bitSet& bitSet::operator + (const bitSet& R)
{ assert(vectorSize == R.vectorSize);
bitSet temp;
for (int i = 0; i < vectorSize; i++)
temp.bitVector[i] = bitVector[i] | R.bitVector[i];
return temp;
}

template
bitSet& bitSet::operator * (const bitSet& R)
{ assert(vectorSize == R.vectorSize);
bitSet temp(vectorSize);
for (int i = 0; i < vectorSize; i++)
temp.bitVector[i] = bitVector[i] & R.bitVector[i];
return temp;
}

template
bitSet& bitSet::operator - (const bitSet& R)
{ assert(vectorSize == R.vectorSize);
bitSet temp(vectorSize);
for (int i = 0; i < vectorSize; i++)
temp.bitVector[i] = bitVector[i] & !R.bitVector[i];
return temp;
}

template
bool bitSet::Contains(const T x)
{ assert(x >= 0 && x <= setSize);
return (getMember(x) == 1)? true: false;
}

int main()
{
bitSet a;
bitSet b;
return 0;
}

解决方案

  • 你的bitset是一个模板类。所应用它来实例化一个变量的时候要带上参数(一个类型)。
  • 至于说为社么定义的时候不要参数,那是因为他认为参数就是你的class T,既然已经明确没那就不要了

解决方案二:

要看你完整的代码。全部贴出来。

解决方案三:

#include
#include
#include
using namespace std;

const int DefaultSize = 50;
template
class bitSet
{
public:
bitSet(int sz = DefaultSize);
bitSet(const bitSet& R);
~bitSet(){delete []bitVector;}
void makeEmpty()
{ for (int i = 0; i < vectorSize; i++) bitVector[i] = 0;}
unsigned short getMember(const T x);
void putMember(const T x, unsigned short v);
bool addMember(const T x);
bool delMember(const T x);
bitSet& operator + (const bitSet& R);
bitSet& operator * (const bitSet& R);
bitSet& operator - (const bitSet& R);
bool Contains(const T x);
bool subSet(bitSet& R);

private:
int setSize;
int vectorSize;
unsigned short *bitVector;
};

template
bitSet::bitSet(int sz):setSize(sz)
{
assert(setSize > 0);
vectorSize = (setSize+15)>>4;
bitVector = new unsigned short[vectorSize];
assert(bitVector != NULL);
for(int i=0; i<vectorSize; i++)bitVector[i] = 0;
};

template
bitSet::bitSet(const bitSet& R)
{
setSize = R.setSize;
vectorSize = R.vectorSize;
bitVector = new unsigned short[vectorSize];
assert(bitVector != NULL);
for (int i = 0; i < vectorSize; i++)
bitVector[i] = R.bitVector[i];
};

template
unsigned short bitSet::getMember(const T x)
{ int ad = x/16, id = x%16;
unsigned short elem = bitVector[ad];
return ((elem >>(15-id)) %2);
}

template
void bitSet::putMember(const T x, unsigned short v)
{ int ad = x/16, id = x%16;
unsigned short elem = bitVector[ad];
unsigned short temp = elem>>(15-id); elem=elem<<(id+1);
if (temp%2 == 0 && v == 1) temp = temp+1;
else if (temp%2 == 1 && v == 0) temp = temp - 1;
bitVector[ad] = (temp<<(15-id)) | (elem>>(id+1));
};

template
bool bitSet::addMember(const T x)
{ assert(x >= 0 && x < setSize);
if (getMember(x) == 0)
{ putMember(x,1); return true;}
return false;
};

template
bool bitSet::delMember(const T x)
{ assert(x >= 0 && x < setSize);
if (getMember(x) == 1)
{ putMember(x,0); return true;}
return false;
}

template
bitSet& bitSet::operator + (const bitSet& R)
{ assert(vectorSize == R.vectorSize);
bitSet temp;
for (int i = 0; i < vectorSize; i++)
temp.bitVector[i] = bitVector[i] | R.bitVector[i];
return temp;
}

template
bitSet& bitSet::operator * (const bitSet& R)
{ assert(vectorSize == R.vectorSize);
bitSet temp(vectorSize);
for (int i = 0; i < vectorSize; i++)
temp.bitVector[i] = bitVector[i] & R.bitVector[i];
return temp;
}

template
bitSet& bitSet::operator - (const bitSet& R)
{ assert(vectorSize == R.vectorSize);
bitSet temp(vectorSize);
for (int i = 0; i < vectorSize; i++)
temp.bitVector[i] = bitVector[i] & !R.bitVector[i];
return temp;
}

template
bool bitSet::Contains(const T x)
{ assert(x >= 0 && x <= setSize);
return (getMember(x) == 1)? true: false;
}

int main()
{
bitSet a;
bitSet b;
return 0;
}

时间: 2024-10-02 19:21:45

模板-图中断点处,85行显示没问题,但94行会报错,为什么?的相关文章

大神,虚拟机运行没问题,手机运行报错,我懵了

问题描述 大神,虚拟机运行没问题,手机运行报错,我懵了 这是为啥么呢,大神 解决方案 把错误截图发一下.... 解决方案二: 编译没问题,运行不了?

sdk-有人用过高德地图的Android SDK嘛、为什么显示地图的时候R老是报错

问题描述 有人用过高德地图的Android SDK嘛.为什么显示地图的时候R老是报错 解决方案 高德地图android sdk 地图显示和定位 基本使用方法 解决方案二: 跟R应该没关系,R是自动生成的. 解决方案三: 看下你的包有没有正确导入,我看它是灰的. 解决方案四: R文件是自动生成的. 应该是你的程序有错误..仔细检查一下吧

安卓-android 新人仿照视频写的一个计算的Demo 对比几次没问题,但是执行 报错求救

问题描述 android 新人仿照视频写的一个计算的Demo 对比几次没问题,但是执行 报错求救 Activity03.java private EditText Ac03textone; private EditText Ac03texttwo; private TextView Ac03viewone; private Button Ac03buttone; @Override protected void onCreate(Bundle savedInstanceState) { supe

spring mvc-swfupload 后台显示上传成功 前台一直报错 着急使用

问题描述 swfupload 后台显示上传成功 前台一直报错 着急使用 swfupload springMVC 后台显示上传成功 前台一直报错 解决方案 把错误信息贴出来看看, 解决方案二: 解决方案三:

android + service-startService没反应,也没有报错,Logcat没任何信息,请大哥大姐们帮看看,呆马如下:

问题描述 startService没反应,也没有报错,Logcat没任何信息,请大哥大姐们帮看看,呆马如下: public class MainActivity extends Activity implements OnClickListener { private Button start; private Button stop; private Button bind; private Button unbind; private MyService.DownloadBinder dow

第一行代码-酷欧天气showProgressDialog();代码报错

问题描述 酷欧天气showProgressDialog();代码报错 第一行代码的酷欧天气ChooseAreaActivity,showProgressDialog();总是显示报错,根据原版的代码修改后依然如此,想知道是什么原因. 以下是代码: package activity; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.ProgressD

在命令行中运行“mvn compile”因为中文报错

在命令行中运行mvn compile 报错:  解决方法: 方式一: 使用maven-compiler-plugin插件,指定编码: Xml代码   <plugin>                   <groupId>org.apache.maven.plugins</groupId>                   <artifactId>maven-compiler-plugin</artifactId>               

在jsp页面中显示lucene的查询结果,报错:org.apache.jasper.JasperException: Java heap space

问题描述 在jsp页面中显示lucene的查询结果,当返回hits的总数小于100时,可以正常显示,当结果大于100,会报如下错误:(但是在java环境下结果输出是正常的)exceptionorg.apache.jasper.JasperException:Javaheapspaceorg.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:433)org.apache.jasper.

在线等。。JBuilder 7 jdk 1.6.0 不能兼容。 编译没问题。运行就报错。说找不到类。

问题描述 java.lang.VerifyError:(class:jp/ofsystem/comm/system/login/Boot,method:mainsignature:([Ljava/lang/String;)V)Incompatibleobjectargumentforfunctioncall运行就出错.是不是jbuilder不支持1.6啊.... 解决方案 解决方案二:JBuilder7?啥年代了呀...换成eclipse吧解决方案三:应该支持的吧,不然这编译器也太挫啦解决方案四