QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 719|回复: 12

帮忙看一下错在什么地方了

[复制链接]
发表于 2003-9-22 17:10:54 | 显示全部楼层 |阅读模式
[code:1]#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "bitvect.h"
#include <limits.h>

const unsigned char highbit=1<<(CHAR_BIT-1);       
BitVector::BitVector()
{
  numBytes=0:
  Bits=0;
  bytes=0;
}

BitVector::BitVector(unsigned char* init,int size)
{
   numBytes=size;
   Bits=numBytes* CHAR_BIT;
  bytes=(unsigned char*)calloc(numBytes,1);
  assert(bytes);
  if(init==0)
  return;
  for(int index=0;index<numBytes;index++)
    for(int offset=0;offset<CHAR_BIT;offset++)
  if(init[index]&(highbit>>offset))
     set(index* CHAR_BIT+offset);
}

BitVector::BitVector(char* binary)
{
  Bits=strlen(binary);
  numBytes=Bits/CHAR_BIT;
  if(Bits% CHAR_BIT)
   numBytes++;
   bytes=(unsigned char*)calloc(numBytes,1);
   assert(bytes);
  for(int i=0;i,Bits;i++)
   if(binary[i]=='1')
   set(i);
}

BitVector::~BitVector()
{
  free(bytes);
}

void BitVector::set(int bit)
{
   assert(bit>=0 && bit<Bits);
   int index=bit/CHAR_BIT;
   int offset=bit%CHAR_BIT;
    unsigned char mask=(1<<offset);
   bytes[index]|=mask;
}

int BitVector::read(int bit)
{
  assert(bit >=0 && bit<Bits);
  int index=bit/CHAR_BIT;
  int offset=bit%CHAR_BIT;
  unsigned char mask=(1<<offset);
  return bytes[index] & mask;
  return bytes[index]& mask;
}

void BitVector::clear(int bit)
{
   assert(bit >=0 && bit <Bits);
   int index=bit/CHAR_BIT;
  int offset=bit&CHAR_BIT;
  unsigned char mask=-(1<<offset);
  bytes[index]&=mask;
}

int BitVector::bits()
{
   return Bits;
}

void BitVector::bits(int size)
{
   int oldsize=Bits;
   Bits=size;
   numBytes= Bits/CHAR_BIT;
   if(Bits%CHAR_BIT)
     numBytes++;
    void* v=realloc(bytes,numBytes);
    assert(v);
   bytes=(unsigned char*)v;
   for(int i=oldsize;i<Bits;i++)
   clear(i);
}

void BitVector::print(const char* msg)
{
  puts(msg);
  for(int i=0;i<Bits;i++)
{
   if(read(i))
   putchar('1');
  else putchar('0');
  if((i+1)%CHAR_BIT==0)
  putchar('');
}
  putchar('\n');
}
//bitvect.cpp
[/code:1]
 楼主| 发表于 2003-9-22 17:12:37 | 显示全部楼层
[code:1]
#ifndef BITVECT_H_
#define BITVECT_H_

class BitVector
{
   unsigned char* bytes;
  int Bits,numBytes;
public:
   BitVector();
   BitVector(unsigned char* init,int size=8);
   BitVector(char* binary);
   ~BitVector();
   void set(int bit);
  void clear(int bit);
  int read(int bit);
  int bits();
  void bits(int sz);
   void print(const char* msg="");
};
bitvect.h
#endif
[/code:1]
g++ -Wall bitvect.cpp后出现的错误是
bitvect.cpp: In constructor `BitVector::BitVector()':
bitvect.cpp:11: parse error before `:' token
bitvect.cpp: In constructor `BitVector::BitVector(char*)':
bitvect.cpp:38: warning: left-hand operand of comma expression has no effect
bitvect.cpp:104:11: empty character constant
回复

使用道具 举报

发表于 2003-9-22 22:00:42 | 显示全部楼层
我要批评你了,   
你编程太不仔细了,错的都是小地方,而且不原意自己思考, 明明有
g++ -Wall bitvect.cpp后出现的错误是
bitvect.cpp: In constructor `BitVector::BitVector()':
bitvect.cpp:11: parse error before `:' token
bitvect.cpp: In constructor `BitVector::BitVector(char*)':
bitvect.cpp:38: warning: left-hand operand of comma expression has no effect
bitvect.cpp:104:11: empty character constant

却不自己找,还好我心肠比较软   
下不为例,自己找错误也是学习的过程啊     
以下是更正后的程序:
[code:1]
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include "bitvect.h"
#include <limits.h>

const unsigned char highbit=1<<(CHAR_BIT-1);   
BitVector::BitVector()
{
  numBytes=0;
  Bits=0;
  bytes=0;
}

BitVector::BitVector(unsigned char* init,int size)
{
   numBytes=size;
   Bits=numBytes* CHAR_BIT;
  bytes=(unsigned char*)calloc(numBytes,1);
  assert(bytes);
  if(init==0)
  return;
  for(int index=0;index<numBytes;index++)
    for(int offset=0;offset<CHAR_BIT;offset++)
  if(init[index]&(highbit>>offset))
     set(index* CHAR_BIT+offset);
}

BitVector::BitVector(char* binary)
{
  Bits=strlen(binary);
  numBytes=Bits/CHAR_BIT;
  if(Bits% CHAR_BIT)
   numBytes++;
   bytes=(unsigned char*)calloc(numBytes,1);
   assert(bytes);
  for(int i=0;i<Bits;i++)
   if(binary[i]=='1')
   set(i);
}

BitVector::~BitVector()
{
  free(bytes);
}

void BitVector::set(int bit)
{
   assert(bit>=0 && bit<Bits);
   int index=bit/CHAR_BIT;
   int offset=bit%CHAR_BIT;
    unsigned char mask=(1<<offset);
   bytes[index]|=mask;
}

int BitVector::read(int bit)
{
  assert(bit >=0 && bit<Bits);
  int index=bit/CHAR_BIT;
  int offset=bit%CHAR_BIT;
  unsigned char mask=(1<<offset);
  return bytes[index] & mask;
  return bytes[index]& mask;
}

void BitVector::clear(int bit)
{
   assert(bit >=0 && bit <Bits);
   int index=bit/CHAR_BIT;
  int offset=bit&CHAR_BIT;
  unsigned char mask=-(1<<offset);
  bytes[index]&=mask;
}

int BitVector::bits()
{
   return Bits;
}

void BitVector::bits(int size)
{
   int oldsize=Bits;
   Bits=size;
   numBytes= Bits/CHAR_BIT;
   if(Bits%CHAR_BIT)
     numBytes++;
    void* v=realloc(bytes,numBytes);
    assert(v);
   bytes=(unsigned char*)v;
   for(int i=oldsize;i<Bits;i++)
   clear(i);
}

void BitVector::print(const char* msg)
{
  puts(msg);
  for(int i=0;i<Bits;i++)
{
   if(read(i))
   putchar('1');
  else putchar('0');
  if((i+1)%CHAR_BIT==0)
  putchar(' ');
}
  putchar('\n');
}
//bitvect.cpp
[/code:1]
回复

使用道具 举报

发表于 2003-9-22 22:07:39 | 显示全部楼层
错的地方:
.cpp文件的 :
11行,将“;”打成了“:”
38行,将“<”打成了“,”
104行,将“''”中加一个空格,ok!
还有
.h中的bitvect.h 记得注释掉   
回复

使用道具 举报

 楼主| 发表于 2003-9-22 22:30:51 | 显示全部楼层
谢谢,把bitvect.h注释掉?那BitVector类,还能找到吗?我在.h里定义的,
回复

使用道具 举报

发表于 2003-9-23 16:09:10 | 显示全部楼层
呵呵,这些比较明显的小错误应该自己可以找出来的,如果这些都找不出来,你以后编写难度大的程序就更加头痛了。
    所以,我建议wuhu多思考,自己主动点,否则做这行做不长久的,绝非危言耸听!   
回复

使用道具 举报

 楼主| 发表于 2003-9-23 16:37:32 | 显示全部楼层
谢谢各位大哥的提点,我下次会注意的!
回复

使用道具 举报

发表于 2003-9-23 20:14:32 | 显示全部楼层
不如就拿这个程序还谈一下思想吧。正好有例,别白费了。
回复

使用道具 举报

发表于 2003-9-27 14:54:37 | 显示全部楼层
zhigangc, 你的意思是谈编程思想,还是面向对象思想?
回复

使用道具 举报

发表于 2003-9-27 14:57:41 | 显示全部楼层
编程思想这个话题是不是太大?
回复

使用道具 举报

 楼主| 发表于 2003-9-27 20:52:53 | 显示全部楼层
???,什么话题?
回复

使用道具 举报

发表于 2003-10-2 14:45:00 | 显示全部楼层
要不,讨论C++ 编程思想?好像是一本书的名字
回复

使用道具 举报

 楼主| 发表于 2003-10-2 17:25:22 | 显示全部楼层
thinking c++,那书翻译的不好,我就在看原版的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-14 11:12 , Processed in 0.098749 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表